Reasoning Details

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

Proof completed.
 < Prove_Constraint exactEval:host:proj_expr_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_expr_other.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_unique.

Variables: L1 L2 S2 E X Ty L
PrA : L1 |{stmt}- secdecl L Ty X E ~~> declare Ty X E
PrB : L2 |{stmt}- secdecl L Ty X E ~~> S2
IsS : is_stmt (secdecl L Ty X E)
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
============================
 declare Ty X E = S2
 < PrB: case PrB.

Variables: L1 L2 E X Ty L
PrA : L1 |{stmt}- secdecl L Ty X E ~~> declare Ty X E
IsS : is_stmt (secdecl L Ty X E)
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
============================
 declare Ty X E = declare Ty X E
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_is.

Variables: L E X Ty L1
Pr : L |{stmt}- secdecl L1 Ty X E ~~> declare Ty X E
IsS : is_stmt (secdecl L1 Ty X E)
IsL : is_list is_string L
============================
 is_stmt (declare Ty X E)
 < case IsS.

Variables: L E X Ty L1
Pr : L |{stmt}- secdecl L1 Ty X E ~~> declare Ty X E
IsL : is_list is_string L
H1 : is_slev L1
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_stmt (declare Ty X E)
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_other.

Variables: L L' E X Ty L1
Pr : L |{stmt}- secdecl L1 Ty X E ~~> declare Ty X E
IsS : is_stmt (secdecl L1 Ty X E)
IsL : is_list is_string L
IsL' : is_list is_string L'
============================
 exists S'', L' |{stmt}- secdecl L1 Ty X E ~~> S''
 < case IsS.

Variables: L L' E X Ty L1
Pr : L |{stmt}- secdecl L1 Ty X E ~~> declare Ty X E
IsL : is_list is_string L
IsL' : is_list is_string L'
H1 : is_slev L1
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 exists S'', L' |{stmt}- secdecl L1 Ty X E ~~> S''
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_fun_unique.

Variables: F2 Body Params RVVal RetVar RetTy Name RetLev
PrA : |{fun}- secfun Name RetTy RetLev RetVar RVVal Params Body ~~> fun Name RetTy RetVar RVVal Params Body
PrB : |{fun}- secfun Name RetTy RetLev RetVar RVVal Params Body ~~> F2
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
============================
 fun Name RetTy RetVar RVVal Params Body = F2
 < case PrB.

Variables: Body Params RVVal RetVar RetTy Name RetLev
PrA : |{fun}- secfun Name RetTy RetLev RetVar RVVal Params Body ~~> fun Name RetTy RetVar RVVal Params Body
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
============================
 fun Name RetTy RetVar RVVal Params Body = fun Name RetTy RetVar RVVal Params Body
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_fun_is.

Variables: Body Params RVVal RetVar RetTy Name RetLev
Pr : |{fun}- secfun Name RetTy RetLev RetVar RVVal Params Body ~~> fun Name RetTy RetVar RVVal Params Body
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
============================
 is_fun (fun Name RetTy RetVar RVVal Params Body)
 < case IsF.

Variables: Body Params RVVal RetVar RetTy Name RetLev
Pr : |{fun}- secfun Name RetTy RetLev RetVar RVVal Params Body ~~> fun Name RetTy RetVar RVVal Params Body
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
============================
 is_fun (fun Name RetTy RetVar RVVal Params Body)
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_param_unique.

Variables: P2 Ty Name L
PrA : |{param}- secparam Name Ty L ~~> param Name Ty
PrB : |{param}- secparam Name Ty L ~~> P2
IsP : is_param (secparam Name Ty L)
============================
 param Name Ty = P2
 < case PrB.

Variables: Ty Name L
PrA : |{param}- secparam Name Ty L ~~> param Name Ty
IsP : is_param (secparam Name Ty L)
============================
 param Name Ty = param Name Ty
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_param_is.

Variables: Ty Name L
Pr : |{param}- secparam Name Ty L ~~> param Name Ty
IsP : is_param (secparam Name Ty L)
============================
 is_param (param Name Ty)
 < case IsP.

Variables: Ty Name L
Pr : |{param}- secparam Name Ty L ~~> param Name Ty
H1 : is_string Name
H2 : is_typ Ty
H3 : is_slev L
============================
 is_param (param Name Ty)
 < search.

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.
 < Extensible_Theorem
      is_slev_public_or_not : forall L,
         IsL : is_slev L ->
         L = public \/
         (L = public -> false)
      on IsL.

Subgoal 1:

IH : forall L, is_slev L * -> L = public \/ (L = public -> false)
IsL : is_slev private @
============================
 private = public \/ (private = public -> false)
 < search.

Subgoal 2:

IH : forall L, is_slev L * -> L = public \/ (L = public -> false)
IsL : is_slev public @
============================
 public = public \/ (public = public -> false)
 < search.

Proof completed.
 < Extensible_Theorem
      is_slev_private_or_not : forall L,
         IsL : is_slev L ->
         L = private \/
         (L = private -> false)
      on IsL.

Subgoal 1:

IH : forall L, is_slev L * -> L = private \/ (L = private -> false)
IsL : is_slev private @
============================
 private = private \/ (private = private -> false)
 < search.

Subgoal 2:

IH : forall L, is_slev L * -> L = private \/ (L = private -> false)
IsL : is_slev public @
============================
 public = private \/ (public = private -> false)
 < search.

Proof completed.
 < Extensible_Theorem
      is_slev_eq_or_not : forall L1 L2,
         IsL1 : is_slev L1 ->
         IsL2 : is_slev L2 ->
         L1 = L2 \/
         (L1 = L2 -> false)
      on IsL1.

Subgoal 1:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev private @
IsL2 : is_slev L2
============================
 private = L2 \/ (private = L2 -> false)
 < Or: apply is_slev_private_or_not to IsL2.

Subgoal 1:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev private @
IsL2 : is_slev L2
Or : L2 = private \/ (L2 = private -> false)
============================
 private = L2 \/ (private = L2 -> false)
 < N: case Or.

Subgoal 1.1:

IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev private @
IsL2 : is_slev private
============================
 private = private \/ (private = private -> false)
 < search.

Subgoal 1.2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev private @
IsL2 : is_slev L2
N : L2 = private -> false
============================
 private = L2 \/ (private = L2 -> false)
 < right.

Subgoal 1.2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev private @
IsL2 : is_slev L2
N : L2 = private -> false
============================
 private = L2 -> false
 < intros E.

Subgoal 1.2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev private @
IsL2 : is_slev L2
N : L2 = private -> false
E : private = L2
============================
 false
 < case E.

Subgoal 1.2:

IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev private @
IsL2 : is_slev private
N : private = private -> false
============================
 false
 < backchain N.

Subgoal 2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev public @
IsL2 : is_slev L2
============================
 public = L2 \/ (public = L2 -> false)
 < Or: apply is_slev_public_or_not to IsL2.

Subgoal 2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev public @
IsL2 : is_slev L2
Or : L2 = public \/ (L2 = public -> false)
============================
 public = L2 \/ (public = L2 -> false)
 < N: case Or.

Subgoal 2.1:

IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev public @
IsL2 : is_slev public
============================
 public = public \/ (public = public -> false)
 < search.

Subgoal 2.2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev public @
IsL2 : is_slev L2
N : L2 = public -> false
============================
 public = L2 \/ (public = L2 -> false)
 < right.

Subgoal 2.2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev public @
IsL2 : is_slev L2
N : L2 = public -> false
============================
 public = L2 -> false
 < intros E.

Subgoal 2.2:

Variables: L2
IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev public @
IsL2 : is_slev L2
N : L2 = public -> false
E : public = L2
============================
 false
 < case E.

Subgoal 2.2:

IH : forall L1 L2, is_slev L1 * -> is_slev L2 -> L1 = L2 \/ (L1 = L2 -> false)
IsL1 : is_slev public @
IsL2 : is_slev public
N : public = public -> false
============================
 false
 < backchain N.

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

Variables: Expr S1 Typ Slev
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_stmt (secdecl Slev Typ S1 Expr) @
R1 : is_slev Slev
R2 : is_typ Typ
R3 : is_string S1
R4 : is_expr Expr *
============================
 <is_stmt {P}> (secdecl Slev Typ S1 Expr)
 < apply IH to R4.

Subgoal 4.10:

Variables: Expr S1 Typ Slev
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_stmt (secdecl Slev Typ S1 Expr) @
R1 : is_slev Slev
R2 : is_typ Typ
R3 : is_string S1
R4 : is_expr Expr *
H1 : <is_expr {P}> Expr
============================
 <is_stmt {P}> (secdecl Slev Typ S1 Expr)
 < 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.

Proof completed.
 < Prove exactEval:host:vars_is.

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

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

Subgoal 1.12:

Variables: N Ctx1 Scope X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsCtx : is_list (is_list is_string) (Scope::Ctx1)
SN : stmtNames (Scope::Ctx1) (secdecl L Ty X E) N ((X::Scope)::Ctx1) @
SN1 : exprNames (Scope::Ctx1) E N *
============================
 is_list is_string N
 < case IsS.

Subgoal 1.12:

Variables: N Ctx1 Scope X E Ty L
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) (Scope::Ctx1)
SN : stmtNames (Scope::Ctx1) (secdecl L Ty X E) N ((X::Scope)::Ctx1) @
SN1 : exprNames (Scope::Ctx1) E N *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_list is_string N
 < apply IH_E to _ _ SN1.

Subgoal 1.12:

Variables: N Ctx1 Scope X E Ty L
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) (Scope::Ctx1)
SN : stmtNames (Scope::Ctx1) (secdecl L Ty X E) N ((X::Scope)::Ctx1) @
SN1 : exprNames (Scope::Ctx1) E N *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_list is_string N
============================
 is_list is_string N
 < search.

Subgoal 2.12:

Variables: N Ctx1 Scope X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsCtx : is_list (is_list is_string) (Scope::Ctx1)
SN : stmtNames (Scope::Ctx1) (secdecl L Ty X E) N ((X::Scope)::Ctx1) @
SN1 : exprNames (Scope::Ctx1) E N *
============================
 is_list (is_list is_string) ((X::Scope)::Ctx1)
 < case IsS.

Subgoal 2.12:

Variables: N Ctx1 Scope X E Ty L
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) (Scope::Ctx1)
SN : stmtNames (Scope::Ctx1) (secdecl L Ty X E) N ((X::Scope)::Ctx1) @
SN1 : exprNames (Scope::Ctx1) E N *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_list (is_list is_string) ((X::Scope)::Ctx1)
 < case IsCtx.

Subgoal 2.12:

Variables: N Ctx1 Scope X E Ty L
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
SN : stmtNames (Scope::Ctx1) (secdecl L Ty X E) N ((X::Scope)::Ctx1) @
SN1 : exprNames (Scope::Ctx1) E N *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_list is_string Scope
H6 : is_list (is_list is_string) Ctx1
============================
 is_list (is_list is_string) ((X::Scope)::Ctx1)
 < search.

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

Subgoal 1.12:

Variables: NA NB CtxB Ctx1 Scope X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsCtx : is_list (is_list is_string) (Scope::Ctx1)
SNA : stmtNames (Scope::Ctx1) (secdecl L Ty X E) NA ((X::Scope)::Ctx1) @
SNB : stmtNames (Scope::Ctx1) (secdecl L Ty X E) NB CtxB
SNA1 : exprNames (Scope::Ctx1) E NA *
============================
 NA = NB /\ (X::Scope)::Ctx1 = CtxB
 < case IsS.

Subgoal 1.12:

Variables: NA NB CtxB Ctx1 Scope X E Ty L
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) (Scope::Ctx1)
SNA : stmtNames (Scope::Ctx1) (secdecl L Ty X E) NA ((X::Scope)::Ctx1) @
SNB : stmtNames (Scope::Ctx1) (secdecl L Ty X E) NB CtxB
SNA1 : exprNames (Scope::Ctx1) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 NA = NB /\ (X::Scope)::Ctx1 = CtxB
 < SNB: case SNB.

Subgoal 1.12:

Variables: NA NB Ctx1 Scope X E Ty L
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) (Scope::Ctx1)
SNA : stmtNames (Scope::Ctx1) (secdecl L Ty X E) NA ((X::Scope)::Ctx1) @
SNA1 : exprNames (Scope::Ctx1) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SNB : exprNames (Scope::Ctx1) E NB
============================
 NA = NB /\ (X::Scope)::Ctx1 = (X::Scope)::Ctx1
 < apply IH_E to _ _ SNA1 SNB.

Subgoal 1.12:

Variables: NB Ctx1 Scope X E Ty L
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) (Scope::Ctx1)
SNA : stmtNames (Scope::Ctx1) (secdecl L Ty X E) NB ((X::Scope)::Ctx1) @
SNA1 : exprNames (Scope::Ctx1) E NB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SNB : exprNames (Scope::Ctx1) E NB
============================
 NB = NB /\ (X::Scope)::Ctx1 = (X::Scope)::Ctx1
 < search.

Proof completed.
 < Prove exactEval:host:stmtNames_keep_older.

Subgoal 12:

Variables: Scope Ctx N X E Ty L
IH : forall Scope Ctx S N Ctx',
       is_stmt S -> is_list (is_list is_string) (Scope::Ctx) -> stmtNames (Scope::Ctx) S N Ctx' * ->
       exists Scope',
         Ctx' = Scope'::Ctx /\ (forall X, mem X Scope -> mem X Scope')
IsS : is_stmt (secdecl L Ty X E)
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN : stmtNames (Scope::Ctx) (secdecl L Ty X E) N ((X::Scope)::Ctx) @
SN1 : exprNames (Scope::Ctx) E N *
============================
 exists Scope',
   (X::Scope)::Ctx = Scope'::Ctx /\ (forall X1, mem X1 Scope -> mem X1 Scope')
 < search.

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

Subgoal 1.10:

Variables: Scope Ctx Expr S1 Typ Slev
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
IsS : is_stmt (secdecl Slev Typ S1 Expr) @
IsCtx : is_list (is_list is_string) (Scope::Ctx)
IsS1 : is_slev Slev
IsS2 : is_typ Typ
IsS3 : is_string S1
IsS4 : is_expr Expr *
============================
 exists N Ctx', stmtNames (Scope::Ctx) (secdecl Slev Typ S1 Expr) N Ctx'
 < apply IH_E to IsS4 IsCtx.

Subgoal 1.10:

Variables: Scope Ctx Expr S1 Typ Slev 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
IsS : is_stmt (secdecl Slev Typ S1 Expr) @
IsCtx : is_list (is_list is_string) (Scope::Ctx)
IsS1 : is_slev Slev
IsS2 : is_typ Typ
IsS3 : is_string S1
IsS4 : is_expr Expr *
H1 : exprNames (Scope::Ctx) Expr N
============================
 exists N Ctx', stmtNames (Scope::Ctx) (secdecl Slev Typ S1 Expr) N Ctx'
 < search.

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

Subgoal 1.12:

Variables: Scope Ctx N X X1 E Ty L
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) N ((X1::Scope)::Ctx) @
MemN : mem X N
MemsCtx : mems X (Scope::Ctx)
SN1 : exprNames (Scope::Ctx) E N *
============================
 false
 < case IsS.

Subgoal 1.12:

Variables: Scope Ctx N X X1 E Ty L
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) (Scope::Ctx)
SN : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) N ((X1::Scope)::Ctx) @
MemN : mem X N
MemsCtx : mems X (Scope::Ctx)
SN1 : exprNames (Scope::Ctx) E N *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 false
 < apply IH_E to _ _ SN1 MemN 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 1.12:

Variables: ScopeA CtxA N ScopeB CtxB X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsCtxA : is_list (is_list is_string) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)
RelBA : forall X, mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)
SN : stmtNames (ScopeA::CtxA) (secdecl L Ty X E) N ((X::ScopeA)::CtxA) @
SN1 : exprNames (ScopeA::CtxA) E N *
============================
 exists CtxB', stmtNames (ScopeB::CtxB) (secdecl L Ty X E) N CtxB'
 < case IsS.

Subgoal 1.12:

Variables: ScopeA CtxA N ScopeB CtxB X E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)
RelBA : forall X, mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)
SN : stmtNames (ScopeA::CtxA) (secdecl L Ty X E) N ((X::ScopeA)::CtxA) @
SN1 : exprNames (ScopeA::CtxA) E N *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 exists CtxB', stmtNames (ScopeB::CtxB) (secdecl L Ty X E) N CtxB'
 < apply IH_E to _ _ _ RelAB RelBA SN1.

Subgoal 1.12:

Variables: ScopeA CtxA N ScopeB CtxB X E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X, mems X (ScopeA::CtxA) -> mems X (ScopeB::CtxB)
RelBA : forall X, mems X (ScopeB::CtxB) -> mems X (ScopeA::CtxA)
SN : stmtNames (ScopeA::CtxA) (secdecl L Ty X E) N ((X::ScopeA)::CtxA) @
SN1 : exprNames (ScopeA::CtxA) E N *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : exprNames (ScopeB::CtxB) E N
============================
 exists CtxB', stmtNames (ScopeB::CtxB) (secdecl L Ty X E) N CtxB'
 < search.

Subgoal 2.12:

Variables: NA CtxB NB CtxB' X Ctx Scope X1 E Ty L
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 CtxB
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNB : stmtNames CtxB (secdecl L Ty X1 E) NB CtxB'
Mems : mems X ((X1::Scope)::Ctx)
SNA1 : exprNames (Scope::Ctx) E NA *
============================
 mems X CtxB'
 < case IsS.

Subgoal 2.12:

Variables: NA CtxB NB CtxB' X Ctx Scope X1 E Ty L
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) CtxB
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 CtxB
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNB : stmtNames CtxB (secdecl L Ty X1 E) NB CtxB'
Mems : mems X ((X1::Scope)::Ctx)
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mems X CtxB'
 < SNB: case SNB.

Subgoal 2.12:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
Mems : mems X ((X1::Scope)::Ctx)
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
============================
 mems X ((X1::Scope1)::Ctx1)
 < M: case Mems.

Subgoal 2.12.1:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X (X1::Scope)
============================
 mems X ((X1::Scope1)::Ctx1)
 < M: case M.

Subgoal 2.12.1.1:

Variables: NA NB Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
============================
 mems X1 ((X1::Scope1)::Ctx1)
 < search.

Subgoal 2.12.1.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope
============================
 mems X ((X1::Scope1)::Ctx1)
 < M': apply RelAB to _ with
         X1 = X.

Subgoal 2.12.1.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope
M' : mems X (Scope1::Ctx1)
============================
 mems X ((X1::Scope1)::Ctx1)
 < case M'.

Subgoal 2.12.1.2.1:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope
H5 : mem X Scope1
============================
 mems X ((X1::Scope1)::Ctx1)
 < search.

Subgoal 2.12.1.2.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope
H5 : mems X Ctx1
============================
 mems X ((X1::Scope1)::Ctx1)
 < search.

Subgoal 2.12.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx
============================
 mems X ((X1::Scope1)::Ctx1)
 < M': apply RelAB to _ with
         X1 = X.

Subgoal 2.12.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx
M' : mems X (Scope1::Ctx1)
============================
 mems X ((X1::Scope1)::Ctx1)
 < case M'.

Subgoal 2.12.2.1:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx
H5 : mem X Scope1
============================
 mems X ((X1::Scope1)::Ctx1)
 < search.

Subgoal 2.12.2.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelAB : forall X1, mems X1 (Scope::Ctx) -> mems X1 (Scope1::Ctx1)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx
H5 : mems X Ctx1
============================
 mems X ((X1::Scope1)::Ctx1)
 < search.

Subgoal 3.12:

Variables: NA CtxB NB CtxB' X Ctx Scope X1 E Ty L
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) CtxB
RelBA : forall X1, mems X1 CtxB -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNB : stmtNames CtxB (secdecl L Ty X1 E) NB CtxB'
Mems : mems X CtxB'
SNA1 : exprNames (Scope::Ctx) E NA *
============================
 mems X ((X1::Scope)::Ctx)
 < SNB: case SNB.

Subgoal 3.12:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
Mems : mems X ((X1::Scope1)::Ctx1)
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
============================
 mems X ((X1::Scope)::Ctx)
 < M: case Mems.

Subgoal 3.12.1:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X (X1::Scope1)
============================
 mems X ((X1::Scope)::Ctx)
 < M: case M.

Subgoal 3.12.1.1:

Variables: NA NB Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
============================
 mems X1 ((X1::Scope)::Ctx)
 < search.

Subgoal 3.12.1.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope1
============================
 mems X ((X1::Scope)::Ctx)
 < M': apply RelBA to _ with
         X1 = X.

Subgoal 3.12.1.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope1
M' : mems X (Scope::Ctx)
============================
 mems X ((X1::Scope)::Ctx)
 < case M'.

Subgoal 3.12.1.2.1:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope1
H1 : mem X Scope
============================
 mems X ((X1::Scope)::Ctx)
 < search.

Subgoal 3.12.1.2.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mem X Scope1
H1 : mems X Ctx
============================
 mems X ((X1::Scope)::Ctx)
 < search.

Subgoal 3.12.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx1
============================
 mems X ((X1::Scope)::Ctx)
 < M': apply RelBA to _ with
         X1 = X.

Subgoal 3.12.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx1
M' : mems X (Scope::Ctx)
============================
 mems X ((X1::Scope)::Ctx)
 < case M'.

Subgoal 3.12.2.1:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx1
H1 : mem X Scope
============================
 mems X ((X1::Scope)::Ctx)
 < search.

Subgoal 3.12.2.2:

Variables: NA NB X Ctx Scope X1 E Ty L Ctx1 Scope1
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (Scope::Ctx)
IsCtxB : is_list (is_list is_string) (Scope1::Ctx1)
RelBA : forall X1, mems X1 (Scope1::Ctx1) -> mems X1 (Scope::Ctx)
SNA : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) NA ((X1::Scope)::Ctx) @
SNA1 : exprNames (Scope::Ctx) E NA *
SNB : exprNames (Scope1::Ctx1) E NB
M : mems X Ctx1
H1 : mems X Ctx
============================
 mems X ((X1::Scope)::Ctx)
 < search.

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

Subgoal 1.12:

Variables: ScopeA CtxA NA ScopeB CtxB NB CtxB' X X1 E Ty L
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNB : stmtNames (ScopeB::CtxB) (secdecl L Ty X1 E) NB CtxB'
M : mem X NB
SNA1 : exprNames (ScopeA::CtxA) E NA *
============================
 mem X NA
 < case IsS.

Subgoal 1.12:

Variables: ScopeA CtxA NA ScopeB CtxB NB CtxB' X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNB : stmtNames (ScopeB::CtxB) (secdecl L Ty X1 E) NB CtxB'
M : mem X NB
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mem X NA
 < SNB: case SNB.

Subgoal 1.12:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
M : mem X NB
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
============================
 mem X NA
 < apply IH_E to _ _ _ _ SNA1 SNB M.

Subgoal 1.12:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
M : mem X NB
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
H5 : mem X NA
============================
 mem X NA
 < search.

Subgoal 2.12:

Variables: ScopeA CtxA NA ScopeB CtxB NB CtxB' X X1 E Ty L
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
IsS : is_stmt (secdecl L Ty X1 E)
IsCtxA : is_list (is_list is_string) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNB : stmtNames (ScopeB::CtxB) (secdecl L Ty X1 E) NB CtxB'
M : mems X ((X1::ScopeA)::CtxA)
SNA1 : exprNames (ScopeA::CtxA) E NA *
============================
 mems X CtxB'
 < case IsS.

Subgoal 2.12:

Variables: ScopeA CtxA NA ScopeB CtxB NB CtxB' X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNB : stmtNames (ScopeB::CtxB) (secdecl L Ty X1 E) NB CtxB'
M : mems X ((X1::ScopeA)::CtxA)
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mems X CtxB'
 < SNB: case SNB.

Subgoal 2.12:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
M : mems X ((X1::ScopeA)::CtxA)
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
============================
 mems X ((X1::ScopeB)::CtxB)
 < M: case M.

Subgoal 2.12.1:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mem X (X1::ScopeA)
============================
 mems X ((X1::ScopeB)::CtxB)
 < M: case M.

Subgoal 2.12.1.1:

Variables: ScopeA CtxA NA ScopeB CtxB NB X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
============================
 mems X1 ((X1::ScopeB)::CtxB)
 < search.

Subgoal 2.12.1.2:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mem X ScopeA
============================
 mems X ((X1::ScopeB)::CtxB)
 < M': apply RelAB to _ with
         X1 = X.

Subgoal 2.12.1.2:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mem X ScopeA
M' : mems X (ScopeB::CtxB)
============================
 mems X ((X1::ScopeB)::CtxB)
 < case M'.

Subgoal 2.12.1.2.1:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mem X ScopeA
H5 : mem X ScopeB
============================
 mems X ((X1::ScopeB)::CtxB)
 < search.

Subgoal 2.12.1.2.2:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mem X ScopeA
H5 : mems X CtxB
============================
 mems X ((X1::ScopeB)::CtxB)
 < search.

Subgoal 2.12.2:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mems X CtxA
============================
 mems X ((X1::ScopeB)::CtxB)
 < M': apply RelAB to _ with
         X1 = X.

Subgoal 2.12.2:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mems X CtxA
M' : mems X (ScopeB::CtxB)
============================
 mems X ((X1::ScopeB)::CtxB)
 < case M'.

Subgoal 2.12.2.1:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mems X CtxA
H5 : mem X ScopeB
============================
 mems X ((X1::ScopeB)::CtxB)
 < search.

Subgoal 2.12.2.2:

Variables: ScopeA CtxA NA ScopeB CtxB NB X X1 E Ty L
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) (ScopeA::CtxA)
IsCtxB : is_list (is_list is_string) (ScopeB::CtxB)
RelAB : forall X1, mems X1 (ScopeA::CtxA) -> mems X1 (ScopeB::CtxB)
SNA : stmtNames (ScopeA::CtxA) (secdecl L Ty X1 E) NA ((X1::ScopeA)::CtxA) @
SNA1 : exprNames (ScopeA::CtxA) E NA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
SNB : exprNames (ScopeB::CtxB) E NB
M : mems X CtxA
H5 : mems X CtxB
============================
 mems X ((X1::ScopeB)::CtxB)
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_exprNames.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames.

Variables: Names Scope Ctx N Ctx' N_P Ctx'_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) N Ctx'
SN_P : stmtNames (Scope::Ctx) (declare Ty X1 E) N_P Ctx'_P
M : mem X N_P
============================
 mem X N
 < SN: case SN.

Variables: Names Scope Ctx N N_P Ctx'_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN_P : stmtNames (Scope::Ctx) (declare Ty X1 E) N_P Ctx'_P
M : mem X N_P
SN : exprNames (Scope::Ctx) E N
============================
 mem X N
 < SN_P: case SN_P.

Variables: Names Scope Ctx N N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mem X N_P
SN : exprNames (Scope::Ctx) E N
SN_P : exprNames (Scope::Ctx) E N_P
============================
 mem X N
 < case IsS.

Variables: Names Scope Ctx N N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mem X N_P
SN : exprNames (Scope::Ctx) E N
SN_P : exprNames (Scope::Ctx) E N_P
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mem X N
 < apply exprNames_unique to _ _ SN SN_P.

Variables: Names Scope Ctx N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mem X N_P
SN : exprNames (Scope::Ctx) E N_P
SN_P : exprNames (Scope::Ctx) E N_P
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mem X N_P
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames_names_forward.

Variables: Names Scope Ctx N Ctx' N_P Ctx'_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) N Ctx'
SN_P : stmtNames (Scope::Ctx) (declare Ty X1 E) N_P Ctx'_P
M : mems X Ctx'
============================
 mems X Ctx'_P
 < SN: case SN.

Variables: Names Scope Ctx N N_P Ctx'_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN_P : stmtNames (Scope::Ctx) (declare Ty X1 E) N_P Ctx'_P
M : mems X ((X1::Scope)::Ctx)
SN : exprNames (Scope::Ctx) E N
============================
 mems X Ctx'_P
 < SN_P: case SN_P.

Variables: Names Scope Ctx N N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mems X ((X1::Scope)::Ctx)
SN : exprNames (Scope::Ctx) E N
SN_P : exprNames (Scope::Ctx) E N_P
============================
 mems X ((X1::Scope)::Ctx)
 < case IsS.

Variables: Names Scope Ctx N N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mems X ((X1::Scope)::Ctx)
SN : exprNames (Scope::Ctx) E N
SN_P : exprNames (Scope::Ctx) E N_P
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mems X ((X1::Scope)::Ctx)
 < apply exprNames_unique to _ _ SN SN_P.

Variables: Names Scope Ctx N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mems X ((X1::Scope)::Ctx)
SN : exprNames (Scope::Ctx) E N_P
SN_P : exprNames (Scope::Ctx) E N_P
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mems X ((X1::Scope)::Ctx)
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames_names_backward.

Variables: Names Scope Ctx N Ctx' N_P Ctx'_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN : stmtNames (Scope::Ctx) (secdecl L Ty X1 E) N Ctx'
SN_P : stmtNames (Scope::Ctx) (declare Ty X1 E) N_P Ctx'_P
M : mems X Ctx'_P
============================
 mems X Ctx'
 < SN: case SN.

Variables: Names Scope Ctx N N_P Ctx'_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
SN_P : stmtNames (Scope::Ctx) (declare Ty X1 E) N_P Ctx'_P
M : mems X Ctx'_P
SN : exprNames (Scope::Ctx) E N
============================
 mems X ((X1::Scope)::Ctx)
 < SN_P: case SN_P.

Variables: Names Scope Ctx N N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsS : is_stmt (secdecl L Ty X1 E)
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mems X ((X1::Scope)::Ctx)
SN : exprNames (Scope::Ctx) E N
SN_P : exprNames (Scope::Ctx) E N_P
============================
 mems X ((X1::Scope)::Ctx)
 < case IsS.

Variables: Names Scope Ctx N N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mems X ((X1::Scope)::Ctx)
SN : exprNames (Scope::Ctx) E N
SN_P : exprNames (Scope::Ctx) E N_P
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mems X ((X1::Scope)::Ctx)
 < apply exprNames_unique to _ _ SN SN_P.

Variables: Names Scope Ctx N_P X E X1 Ty L
Pr : Names |{stmt}- secdecl L Ty X1 E ~~> declare Ty X1 E
IsNames : is_list is_string Names
IsCtx : is_list (is_list is_string) (Scope::Ctx)
M : mems X ((X1::Scope)::Ctx)
SN : exprNames (Scope::Ctx) E N_P
SN_P : exprNames (Scope::Ctx) E N_P
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
============================
 mems X ((X1::Scope)::Ctx)
 < search.

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

Subgoal 2.12:

Variables: FT RestTC Scope Ty X E L
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
Ty : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
Ty1 : no_lookup Scope X
Ty2 : typeOf FT (Scope::RestTC) E Ty *
============================
 is_list (is_list (is_pair is_string is_typ)) (((X, Ty)::Scope)::RestTC)
 < case IsS.

Subgoal 2.12:

Variables: FT RestTC Scope Ty X E L
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)) (Scope::RestTC)
Ty : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
Ty1 : no_lookup Scope X
Ty2 : typeOf FT (Scope::RestTC) E Ty *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_list (is_list (is_pair is_string is_typ)) (((X, Ty)::Scope)::RestTC)
 < case IsET.

Subgoal 2.12:

Variables: FT RestTC Scope Ty X E L
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
Ty : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
Ty1 : no_lookup Scope X
Ty2 : typeOf FT (Scope::RestTC) E Ty *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_list (is_pair is_string is_typ) Scope
H6 : is_list (is_list (is_pair is_string is_typ)) RestTC
============================
 is_list (is_list (is_pair is_string is_typ)) (((X, Ty)::Scope)::RestTC)
 < search.

Proof completed.
 < Prove exactEval:host:stmtOK_keep_scopes.

Subgoal 12:

Variables: FT N RestTC Scope Ty X E L
IH : forall FT ET S ET' N,
       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' * ->
       length ET N -> length ET' N
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
Ty : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
L : length (Scope::RestTC) N
Ty1 : no_lookup Scope X
Ty2 : typeOf FT (Scope::RestTC) E Ty *
============================
 length (((X, Ty)::Scope)::RestTC) N
 < case L.

Subgoal 12:

Variables: FT N RestTC Scope Ty X E L N'
IH : forall FT ET S ET' N,
       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' * ->
       length ET N -> length ET' N
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
Ty : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
Ty1 : no_lookup Scope X
Ty2 : typeOf FT (Scope::RestTC) E Ty *
H1 : length RestTC N'
H2 : 1 + N' = N
============================
 length (((X, Ty)::Scope)::RestTC) N
 < search.

Proof completed.
 < Prove exactEval:host:stmtOK_older_scopes_same.

Subgoal 12:

Variables: FT ET Scope Ty X E L
IH : forall FT ET S ET' Scope,
       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)) (Scope::ET) -> stmtOK FT (Scope::ET) S ET' * ->
       exists Scope', ET' = Scope'::ET
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::ET)
Ty : stmtOK FT (Scope::ET) (secdecl L Ty X E) (((X, Ty)::Scope)::ET) @
Ty1 : no_lookup Scope X
Ty2 : typeOf FT (Scope::ET) E Ty *
============================
 exists Scope', ((X, Ty)::Scope)::ET = Scope'::ET
 < search.

Proof completed.
 < Prove exactEval:host:stmtOK_first_scope_lookup_same.

Subgoal 12:

Variables: FT ET Scope X Ty Ty1 X1 E L
IH : forall FT ET S Scope Scope' X Ty,
       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)) (Scope::ET) -> stmtOK FT (Scope::ET) S (Scope'::ET) * ->
       lookup Scope X Ty -> lookup Scope' X Ty
IsS : is_stmt (secdecl L Ty1 X1 E)
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)) (Scope::ET)
Ty : stmtOK FT (Scope::ET) (secdecl L Ty1 X1 E) (((X1, Ty1)::Scope)::ET) @
L : lookup Scope X Ty
Ty1 : no_lookup Scope X1
Ty2 : typeOf FT (Scope::ET) E Ty1 *
============================
 lookup ((X1, Ty1)::Scope) X Ty
 < assert X1 = X -> false.

Subgoal 12.1:

Variables: FT ET Scope X Ty Ty1 X1 E L
IH : forall FT ET S Scope Scope' X Ty,
       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)) (Scope::ET) -> stmtOK FT (Scope::ET) S (Scope'::ET) * ->
       lookup Scope X Ty -> lookup Scope' X Ty
IsS : is_stmt (secdecl L Ty1 X1 E)
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)) (Scope::ET)
Ty : stmtOK FT (Scope::ET) (secdecl L Ty1 X1 E) (((X1, Ty1)::Scope)::ET) @
L : lookup Scope X Ty
Ty1 : no_lookup Scope X1
Ty2 : typeOf FT (Scope::ET) E Ty1 *
============================
 X1 = X -> false
 < intros E.

Subgoal 12.1:

Variables: FT ET Scope X Ty Ty1 X1 E L
IH : forall FT ET S Scope Scope' X Ty,
       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)) (Scope::ET) -> stmtOK FT (Scope::ET) S (Scope'::ET) * ->
       lookup Scope X Ty -> lookup Scope' X Ty
IsS : is_stmt (secdecl L Ty1 X1 E)
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)) (Scope::ET)
Ty : stmtOK FT (Scope::ET) (secdecl L Ty1 X1 E) (((X1, Ty1)::Scope)::ET) @
L : lookup Scope X Ty
Ty1 : no_lookup Scope X1
Ty2 : typeOf FT (Scope::ET) E Ty1 *
E : X1 = X
============================
 false
 < case E.

Subgoal 12.1:

Variables: FT ET Scope X Ty Ty1 E L
IH : forall FT ET S Scope Scope' X Ty,
       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)) (Scope::ET) -> stmtOK FT (Scope::ET) S (Scope'::ET) * ->
       lookup Scope X Ty -> lookup Scope' X Ty
IsS : is_stmt (secdecl L Ty1 X E)
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)) (Scope::ET)
Ty : stmtOK FT (Scope::ET) (secdecl L Ty1 X E) (((X, Ty1)::Scope)::ET) @
L : lookup Scope X Ty
Ty1 : no_lookup Scope X
Ty2 : typeOf FT (Scope::ET) E Ty1 *
============================
 false
 < apply no_lookup to Ty1 L.

Subgoal 12:

Variables: FT ET Scope X Ty Ty1 X1 E L
IH : forall FT ET S Scope Scope' X Ty,
       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)) (Scope::ET) -> stmtOK FT (Scope::ET) S (Scope'::ET) * ->
       lookup Scope X Ty -> lookup Scope' X Ty
IsS : is_stmt (secdecl L Ty1 X1 E)
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)) (Scope::ET)
Ty : stmtOK FT (Scope::ET) (secdecl L Ty1 X1 E) (((X1, Ty1)::Scope)::ET) @
L : lookup Scope X Ty
Ty1 : no_lookup Scope X1
Ty2 : typeOf FT (Scope::ET) E Ty1 *
H1 : X1 = X -> false
============================
 lookup ((X1, Ty1)::Scope) X Ty
 < search.

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

Subgoal 2.12:

Variables: FT ET_B ET_B' RestTC Scope Ty X E L
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) ET_B
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyB : stmtOK FT ET_B (secdecl L Ty X E) ET_B'
Lkp : lookup_all_scopes (Scope::RestTC) ET_B
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
============================
 lookup_all_scopes (((X, Ty)::Scope)::RestTC) ET_B'
 < TyB: case TyB.

Subgoal 2.12:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
Lkp : lookup_all_scopes (Scope::RestTC) (Scope1::RestTC1)
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
============================
 lookup_all_scopes (((X, Ty)::Scope)::RestTC) (((X, Ty)::Scope1)::RestTC1)
 < R: case Lkp.

Subgoal 2.12:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
============================
 lookup_all_scopes (((X, Ty)::Scope)::RestTC) (((X, Ty)::Scope1)::RestTC1)
 < unfold .

Subgoal 2.12.1:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
============================
 forall X1 V, lookup ((X, Ty)::Scope) X1 V -> lookup ((X, Ty)::Scope1) X1 V
 < intros L.

Subgoal 2.12.1:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1 X1 V
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
L : lookup ((X, Ty)::Scope) X1 V
============================
 lookup ((X, Ty)::Scope1) X1 V
 < L: case L.

Subgoal 2.12.1.1:

Variables: FT RestTC Scope E L RestTC1 Scope1 X1 V
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
IsS : is_stmt (secdecl L V X1 E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L V X1 E) (((X1, V)::Scope)::RestTC) @
TyA1 : no_lookup Scope X1
TyA2 : typeOf FT (Scope::RestTC) E V *
TyB : no_lookup Scope1 X1
TyB1 : typeOf FT (Scope1::RestTC1) E V
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
============================
 lookup ((X1, V)::Scope1) X1 V
 < search.

Subgoal 2.12.1.2:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1 X1 V
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
L : X = X1 -> false
L1 : lookup Scope X1 V
============================
 lookup ((X, Ty)::Scope1) X1 V
 < apply R to L1.

Subgoal 2.12.1.2:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1 X1 V
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
L : X = X1 -> false
L1 : lookup Scope X1 V
H1 : lookup Scope1 X1 V
============================
 lookup ((X, Ty)::Scope1) X1 V
 < search.

Subgoal 2.12.2:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
============================
 forall X1,
   is_string X1 -> no_lookup ((X, Ty)::Scope) X1 -> no_lookup ((X, Ty)::Scope1) X1
 < intros IsX1 NL.

Subgoal 2.12.2:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1 X1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
IsX1 : is_string X1
NL : no_lookup ((X, Ty)::Scope) X1
============================
 no_lookup ((X, Ty)::Scope1) X1
 < NL: case NL.

Subgoal 2.12.2:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1 X1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
IsX1 : is_string X1
NL : X = X1 -> false
NL1 : no_lookup Scope X1
============================
 no_lookup ((X, Ty)::Scope1) X1
 < apply R1 to _ NL1.

Subgoal 2.12.2:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1 X1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
IsX1 : is_string X1
NL : X = X1 -> false
NL1 : no_lookup Scope X1
H1 : no_lookup Scope1 X1
============================
 no_lookup ((X, Ty)::Scope1) X1
 < search.

Subgoal 2.12.3:

Variables: FT RestTC Scope Ty X E L RestTC1 Scope1
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
IsS : is_stmt (secdecl L Ty X E)
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)) (Scope::RestTC)
IsB : is_list (is_list (is_pair is_string is_typ)) (Scope1::RestTC1)
TyA : stmtOK FT (Scope::RestTC) (secdecl L Ty X E) (((X, Ty)::Scope)::RestTC) @
TyA1 : no_lookup Scope X
TyA2 : typeOf FT (Scope::RestTC) E Ty *
TyB : no_lookup Scope1 X
TyB1 : typeOf FT (Scope1::RestTC1) E Ty
R : forall X V, lookup Scope X V -> lookup Scope1 X V
R1 : forall X, is_string X -> no_lookup Scope X -> no_lookup Scope1 X
R2 : lookup_all_scopes RestTC RestTC1
============================
 lookup_all_scopes RestTC RestTC1
 < search.

Proof completed.
 < Prove exactEval:host:paramTy_is.

Subgoal 2:

Variables: N T L
IH : forall P N T, is_param P -> paramTy P N T * -> is_string N /\ is_typ T
IsP : is_param (secparam N T L)
PT : paramTy (secparam N T L) N T @
============================
 is_string N /\ is_typ T
 < case IsP.

Subgoal 2:

Variables: N T L
IH : forall P N T, is_param P -> paramTy P N T * -> is_string N /\ is_typ T
PT : paramTy (secparam N T L) N T @
H1 : is_string N
H2 : is_typ T
H3 : is_slev L
============================
 is_string N /\ is_typ T
 < search.

Proof completed.
 < Prove exactEval:host:getFunInfo_is.

Subgoal 2:

Variables: N R P NameTys Body Params RVVal RetVar RetLev
IH : forall F N R P,
       is_fun F -> getFunInfo F N R P * -> (is_string N /\ is_typ R) /\
       is_list is_typ P
IsF : is_fun (secfun N R RetLev RetVar RVVal Params Body)
GFI : getFunInfo (secfun N R RetLev RetVar RVVal Params Body) N R P @
GFI1 : paramTys Params NameTys
GFI2 : values NameTys P
============================
 (is_string N /\ is_typ R) /\ is_list is_typ P
 < case IsF.

Subgoal 2:

Variables: N R P NameTys Body Params RVVal RetVar RetLev
IH : forall F N R P,
       is_fun F -> getFunInfo F N R P * -> (is_string N /\ is_typ R) /\
       is_list is_typ P
GFI : getFunInfo (secfun N R RetLev RetVar RVVal Params Body) N R P @
GFI1 : paramTys Params NameTys
GFI2 : values NameTys P
H1 : is_string N
H2 : is_typ R
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
============================
 (is_string N /\ is_typ R) /\ is_list is_typ P
 < apply paramTys_is to _ GFI1.

Subgoal 2:

Variables: N R P NameTys Body Params RVVal RetVar RetLev
IH : forall F N R P,
       is_fun F -> getFunInfo F N R P * -> (is_string N /\ is_typ R) /\
       is_list is_typ P
GFI : getFunInfo (secfun N R RetLev RetVar RVVal Params Body) N R P @
GFI1 : paramTys Params NameTys
GFI2 : values NameTys P
H1 : is_string N
H2 : is_typ R
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
H8 : is_list (is_pair is_string is_typ) NameTys
============================
 (is_string N /\ is_typ R) /\ is_list is_typ P
 < apply values_is_ty to _ GFI2.

Subgoal 2:

Variables: N R P NameTys Body Params RVVal RetVar RetLev
IH : forall F N R P,
       is_fun F -> getFunInfo F N R P * -> (is_string N /\ is_typ R) /\
       is_list is_typ P
GFI : getFunInfo (secfun N R RetLev RetVar RVVal Params Body) N R P @
GFI1 : paramTys Params NameTys
GFI2 : values NameTys P
H1 : is_string N
H2 : is_typ R
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
H8 : is_list (is_pair is_string is_typ) NameTys
H9 : is_list is_typ P
============================
 (is_string N /\ is_typ R) /\ is_list is_typ P
 < search.

Proof completed.
 < Prove exactEval:host:paramTy_exists.

Subgoal 2:

Variables: Slev Typ S
IH : forall P, is_param P * -> exists N T, paramTy P N T
IsP : is_param (secparam S Typ Slev) @
IsP1 : is_string S
IsP2 : is_typ Typ
IsP3 : is_slev Slev
============================
 exists N T, paramTy (secparam S Typ Slev) N T
 < search.

Proof completed.
 < Prove exactEval:host:getFunInfo_exists.

Subgoal 2:

Variables: Stmt L Value S Slev Typ S1
IH : forall F, is_fun F * -> exists N R P, getFunInfo F N R P
IsF : is_fun (secfun S1 Typ Slev S Value L Stmt) @
IsF1 : is_string S1
IsF2 : is_typ Typ
IsF3 : is_slev Slev
IsF4 : is_string S
IsF5 : is_value Value
IsF6 : is_list is_param L
IsF7 : is_stmt Stmt
============================
 exists N R P, getFunInfo (secfun S1 Typ Slev S Value L Stmt) N R P
 < PT: apply paramTys_exists to IsF6.

Subgoal 2:

Variables: Stmt L Value S Slev Typ S1 PTys
IH : forall F, is_fun F * -> exists N R P, getFunInfo F N R P
IsF : is_fun (secfun S1 Typ Slev S Value L Stmt) @
IsF1 : is_string S1
IsF2 : is_typ Typ
IsF3 : is_slev Slev
IsF4 : is_string S
IsF5 : is_value Value
IsF6 : is_list is_param L
IsF7 : is_stmt Stmt
PT : paramTys L PTys
============================
 exists N R P, getFunInfo (secfun S1 Typ Slev S Value L Stmt) N R P
 < Is: apply paramTys_is to _ PT.

Subgoal 2:

Variables: Stmt L Value S Slev Typ S1 PTys
IH : forall F, is_fun F * -> exists N R P, getFunInfo F N R P
IsF : is_fun (secfun S1 Typ Slev S Value L Stmt) @
IsF1 : is_string S1
IsF2 : is_typ Typ
IsF3 : is_slev Slev
IsF4 : is_string S
IsF5 : is_value Value
IsF6 : is_list is_param L
IsF7 : is_stmt Stmt
PT : paramTys L PTys
Is : is_list (is_pair is_string is_typ) PTys
============================
 exists N R P, getFunInfo (secfun S1 Typ Slev S Value L Stmt) N R P
 < apply values_exists_ty to Is.

Subgoal 2:

Variables: Stmt L Value S Slev Typ S1 PTys V
IH : forall F, is_fun F * -> exists N R P, getFunInfo F N R P
IsF : is_fun (secfun S1 Typ Slev S Value L Stmt) @
IsF1 : is_string S1
IsF2 : is_typ Typ
IsF3 : is_slev Slev
IsF4 : is_string S
IsF5 : is_value Value
IsF6 : is_list is_param L
IsF7 : is_stmt Stmt
PT : paramTys L PTys
Is : is_list (is_pair is_string is_typ) PTys
H1 : values PTys V
============================
 exists N R P, getFunInfo (secfun S1 Typ Slev S Value L Stmt) N R P
 < search.

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

Variables: FE EE O EE2 Scope V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
============================
 is_list (is_list (is_pair is_string is_value)) (((X, V)::Scope)::EE2)
 < case IsS.

Subgoal 3.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_list (is_list (is_pair is_string is_value)) (((X, V)::Scope)::EE2)
 < apply IH_V_E to _ _ _ Ev1.

Subgoal 3.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
============================
 is_list (is_list (is_pair is_string is_value)) (((X, V)::Scope)::EE2)
 < IsEE2+: apply IH_C_E to _ _ _ Ev1.

Subgoal 3.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
IsEE2+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE2)
============================
 is_list (is_list (is_pair is_string is_value)) (((X, V)::Scope)::EE2)
 < case IsEE2+.

Subgoal 3.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
H6 : is_list (is_pair is_string is_value) Scope
H7 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 is_list (is_list (is_pair is_string is_value)) (((X, V)::Scope)::EE2)
 < search.

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

Subgoal 2.15:

Variables: FE EE O EE2 Scope V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
============================
 is_list is_value O
 < case IsS.

Subgoal 2.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_list is_value O
 < apply IH_E to _ _ _ Ev1.

Subgoal 2.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_list is_value O
============================
 is_list is_value O
 < search.

Proof completed.
 < Prove exactEval:host:paramName_is.

Subgoal 2:

Variables: N L Ty
IH : forall P N, is_param P -> paramName P N * -> is_string N
IsP : is_param (secparam N Ty L)
PN : paramName (secparam N Ty L) N @
============================
 is_string N
 < case IsP.

Subgoal 2:

Variables: N L Ty
IH : forall P N, is_param P -> paramName P N * -> is_string N
PN : paramName (secparam N Ty L) N @
H1 : is_string N
H2 : is_typ Ty
H3 : is_slev L
============================
 is_string N
 < search.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_is.

Subgoal 2:

Variables: Name RetVar RVVal PNames Body Params RetLev RetTy
IH : forall F Name RetVar RVVal PNames Body,
       is_fun F -> getFunEvalInfo F Name RetVar RVVal PNames Body * -> (((is_string Name /\
       is_string RetVar) /\
       is_value RVVal) /\
       is_list is_string PNames) /\
       is_stmt Body
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
GEFI : getFunEvalInfo (secfun Name RetTy RetLev RetVar RVVal Params Body) Name RetVar RVVal PNames Body @
GEFI1 : paramNames Params PNames
============================
 (((is_string Name /\ is_string RetVar) /\ is_value RVVal) /\
 is_list is_string PNames) /\
 is_stmt Body
 < case IsF.

Subgoal 2:

Variables: Name RetVar RVVal PNames Body Params RetLev RetTy
IH : forall F Name RetVar RVVal PNames Body,
       is_fun F -> getFunEvalInfo F Name RetVar RVVal PNames Body * -> (((is_string Name /\
       is_string RetVar) /\
       is_value RVVal) /\
       is_list is_string PNames) /\
       is_stmt Body
GEFI : getFunEvalInfo (secfun Name RetTy RetLev RetVar RVVal Params Body) Name RetVar RVVal PNames Body @
GEFI1 : paramNames Params PNames
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
============================
 (((is_string Name /\ is_string RetVar) /\ is_value RVVal) /\
 is_list is_string PNames) /\
 is_stmt Body
 < apply paramNames_is to _ GEFI1.

Subgoal 2:

Variables: Name RetVar RVVal PNames Body Params RetLev RetTy
IH : forall F Name RetVar RVVal PNames Body,
       is_fun F -> getFunEvalInfo F Name RetVar RVVal PNames Body * -> (((is_string Name /\
       is_string RetVar) /\
       is_value RVVal) /\
       is_list is_string PNames) /\
       is_stmt Body
GEFI : getFunEvalInfo (secfun Name RetTy RetLev RetVar RVVal Params Body) Name RetVar RVVal PNames Body @
GEFI1 : paramNames Params PNames
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
H8 : is_list is_string PNames
============================
 (((is_string Name /\ is_string RetVar) /\ is_value RVVal) /\
 is_list is_string PNames) /\
 is_stmt Body
 < search.

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

Variables: FE Scope EE O EE2 Scope1 V X E Ty L
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'
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 exists Scope' EE'', ((X, V)::Scope1)::EE2 = Scope'::EE'' /\ names_same EE EE''
 < case IsS.

Subgoal 2.15:

Variables: FE Scope EE O EE2 Scope1 V X E Ty L
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)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 exists Scope' EE'', ((X, V)::Scope1)::EE2 = Scope'::EE'' /\ names_same EE EE''
 < NS: apply IH_E to _ _ _ Ev1.

Subgoal 2.15:

Variables: FE Scope EE O EE2 Scope1 V X E Ty L
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)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
NS : names_same (Scope::EE) (Scope1::EE2)
============================
 exists Scope' EE'', ((X, V)::Scope1)::EE2 = Scope'::EE'' /\ names_same EE EE''
 < case NS.

Subgoal 2.15:

Variables: FE Scope EE O EE2 Scope1 V X E Ty L
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)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope1
H6 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope
H7 : names_same EE EE2
============================
 exists Scope' EE'', ((X, V)::Scope1)::EE2 = Scope'::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 4.15:

Variables: FE EE_A EE_B EE_B' O_A O_B N Len Scope EE1 Scope1 V X E Ty L
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'
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_A @
EvB : evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_A *
============================
 O_A = O_B
 < case IsS.

Subgoal 4.15:

Variables: FE EE_A EE_B EE_B' O_A O_B N Len Scope EE1 Scope1 V X E Ty L
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_A @
EvB : evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 O_A = O_B
 < EvB: case EvB.

Subgoal 4.15:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 V X E Ty L EE2 Scope2 V1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
============================
 O_A = O_B
 < apply IH_O_E to _ _ _ _ EvA1 EvB _.

Subgoal 4.15:

Variables: FE EE_A EE_B O_B N Len Scope EE1 Scope1 V X E Ty L EE2 Scope2 V1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_B @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_B *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
============================
 O_B = O_B
 < search.

Subgoal 5.15:

Variables: FE EE_A EE_B EE_B' O_A O_B N Len Scope EE1 Scope1 V X E Ty L
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'
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_A @
EvB : evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_A *
============================
 newNameScopes N Len (((X, V)::Scope1)::EE1) EE_B'
 < case IsS.

Subgoal 5.15:

Variables: FE EE_A EE_B EE_B' O_A O_B N Len Scope EE1 Scope1 V X E Ty L
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_A @
EvB : evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O_B
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 newNameScopes N Len (((X, V)::Scope1)::EE1) EE_B'
 < EvB: case EvB.

Subgoal 5.15:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 V X E Ty L EE2 Scope2 V1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
============================
 newNameScopes N Len (((X, V)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < NNS': apply IH_C_E to _ _ _ _ EvA1 EvB _.

Subgoal 5.15:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 V X E Ty L EE2 Scope2 V1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
============================
 newNameScopes N Len (((X, V)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < apply IH_V_E to _ _ _ _ EvA1 EvB _.

Subgoal 5.15:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < NNS': case NNS' (keep).

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < LenB: apply length_exists_list_pair_string_value to IsB.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < LenB': case LenB (keep).

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < LEq: apply newNameScopes_length to NNS LenB'.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : Len <= N'
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < LenEE2+: apply evalExpr_keep_scopes to _ _ _ EvB LenB.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : Len <= N'
LenEE2+ : length (Scope2::EE2) N2
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < LenEE2: case LenEE2+ (keep).

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N' N'1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : Len <= N'
LenEE2+ : length (Scope2::EE2) N2
LenEE2 : length EE2 N'1
LenEE1 : 1 + N'1 = N2
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < apply length_is to LenB'.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N' N'1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : Len <= N'
LenEE2+ : length (Scope2::EE2) N2
LenEE2 : length EE2 N'1
LenEE1 : 1 + N'1 = N2
H5 : is_integer N'
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < apply length_is to LenEE2.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N' N'1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) Len
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : Len <= N'
LenEE2+ : length (Scope2::EE2) N2
LenEE2 : length EE2 N'1
LenEE1 : 1 + N'1 = N2
H5 : is_integer N'
H6 : is_integer N'1
============================
 newNameScopes N Len (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < apply length_unique to NNS'1 LenEE2+.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N' N'1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N N2 EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N N2 (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) N2
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : N2 <= N'
LenEE2+ : length (Scope2::EE2) N2
LenEE2 : length EE2 N'1
LenEE1 : 1 + N'1 = N2
H5 : is_integer N'
H6 : is_integer N'1
============================
 newNameScopes N N2 (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < apply plus_integer_unique_addend to _ _ _ LenEE1 LenB'1.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N N2 EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N N2 (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) N2
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : N2 <= N'
LenEE2+ : length (Scope2::EE2) N2
LenEE2 : length EE2 N'
LenEE1 : 1 + N' = N2
H5 : is_integer N'
H6 : is_integer N'
============================
 newNameScopes N N2 (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < L: apply lt_plus_one to LenEE1 _.

Subgoal 5.15.1:

Variables: FE EE_A EE_B O_A O_B N Scope EE1 Scope1 X E Ty L EE2 Scope2 V1 N1 SNames BNames N2 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope1)::EE1) O_A @
NNS : newNameScopes N N2 EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope1::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N N2 (Scope1::EE1) (Scope2::EE2)
NNS'1 : length (Scope2::EE2) N2
NNS'2 : drop N1 (Scope1::EE1) (Scope2::EE2)
NNS'3 : take N1 (Scope1::EE1) N
NNS'4 : names N SNames
NNS'5 : names (Scope2::EE2) BNames
NNS'6 : forall X, mem X SNames -> mem X BNames -> false
LenB : length (Scope::EE_B) N2
LenB' : length EE_B N'
LenB'1 : 1 + N' = N2
LEq : N2 <= N'
LenEE2+ : length (Scope2::EE2) N2
LenEE2 : length EE2 N'
LenEE1 : 1 + N' = N2
H5 : is_integer N'
H6 : is_integer N'
L : N' < N2
============================
 newNameScopes N N2 (((X, V1)::Scope1)::EE1) (((X, V1)::Scope2)::EE2)
 < apply less_lesseq_flip_false to L LEq.

Subgoal 5.15.2:

Variables: FE EE_A EE_B O_A O_B N Len Scope EE1 X E Ty L EE2 Scope2 V1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V1)::Scope2)::EE1) O_A @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V1 (Scope2::EE1) O_A *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (Scope::EE_B) E V1 (Scope2::EE2) O_B
NNS' : newNameScopes N Len (Scope2::EE1) (Scope2::EE2)
NNS'1 : newNameScopes N Len EE1 EE2
============================
 newNameScopes N Len (((X, V1)::Scope2)::EE1) (((X, V1)::Scope2)::EE2)
 < 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 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < NNS': assert newNameScopes N Len (Scope::EE_A) (Scope::EE_B).

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < case IsS.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < EvA1: apply IH_E to _ _ _ _ EvB2 NNS'.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L 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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < Len_EE_A+: apply length_exists_list_pair_string_value to IsA.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
Len_EE_A+ : length (Scope::EE_A) N1
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < EvA1': apply drop_ext_size_evalExpr to EvA1.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
Len_EE_A+ : length (Scope::EE_A) N1
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < Len_EE_A': apply evalExpr_keep_scopes to _ _ _ EvA1' Len_EE_A+.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
Len_EE_A+ : length (Scope::EE_A) N1
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
Len_EE_A' : length EE_A' N1
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < Len: case Len_EE_A+.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
Len_EE_A' : length EE_A' N1
Len : length EE_A N'
Len1 : 1 + N' = N1
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < GEq: apply length_geq_0 to Len.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
Len_EE_A' : length EE_A' N1
Len : length EE_A N'
Len1 : 1 + N' = N1
GEq : N' >= 0
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < apply length_is to Len.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
Len_EE_A' : length EE_A' N1
Len : length EE_A N'
Len1 : 1 + N' = N1
GEq : N' >= 0
H5 : is_integer N'
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < L: apply lt_plus_one to Len1 _.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
Len_EE_A' : length EE_A' N1
Len : length EE_A N'
Len1 : 1 + N' = N1
GEq : N' >= 0
H5 : is_integer N'
L : N' < N1
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < LEq: case GEq.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
Len_EE_A' : length EE_A' N1
Len : length EE_A N'
Len1 : 1 + N' = N1
H5 : is_integer N'
L : N' < N1
LEq : 0 <= N'
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < apply lesseq_less_integer_transitive to LEq L.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L EE_A' N1 N'
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V EE_A' O N2
EvA1' : evalExpr FE (Scope::EE_A) E V EE_A' O
Len_EE_A' : length EE_A' N1
Len : length EE_A N'
Len1 : 1 + N' = N1
H5 : is_integer N'
L : N' < N1
LEq : 0 <= N'
H6 : 0 < N1
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) EE_A' O ES
 < apply length_cons to Len_EE_A' _.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope ES N2 EE1 Scope1 V X E Ty L N1 N' H T
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
EvB : <evalStmt {ES}> FE (Scope::EE_B) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O ES @
NNS : newNameScopes N Len EE_A EE_B
EvB1 : 1 + N2 = ES
EvB2 : <evalExpr {ES}> FE (Scope::EE_B) E V (Scope1::EE1) O N2 *
NNS' : newNameScopes N Len (Scope::EE_A) (Scope::EE_B)
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvA1 : <evalExpr {ES}> FE (Scope::EE_A) E V (H::T) O N2
EvA1' : evalExpr FE (Scope::EE_A) E V (H::T) O
Len_EE_A' : length (H::T) N1
Len : length EE_A N'
Len1 : 1 + N' = N1
H5 : is_integer N'
L : N' < N1
LEq : 0 <= N'
H6 : 0 < N1
============================
 exists EE_A', <evalStmt {ES}> FE (Scope::EE_A) (secdecl L Ty X E) 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 2.15:

Variables: FE EE O Ctx Ctx' N EE2 Scope V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
SN : stmtNames Ctx (secdecl L Ty X E) N Ctx'
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
============================
 ctx_names (((X, V)::Scope)::EE2) Ctx'
 < case IsS.

Subgoal 2.15:

Variables: FE EE O Ctx Ctx' N EE2 Scope V X E Ty L
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
SN : stmtNames Ctx (secdecl L Ty X E) N Ctx'
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 ctx_names (((X, V)::Scope)::EE2) Ctx'
 < SN: case SN.

Subgoal 2.15:

Variables: FE EE O N EE2 Scope V X E Ty L Ctx1 Scope1
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) (Scope1::Ctx1)
Ctxs : ctx_names EE (Scope1::Ctx1)
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SN : exprNames (Scope1::Ctx1) E N
============================
 ctx_names (((X, V)::Scope)::EE2) ((X::Scope1)::Ctx1)
 < apply IH_E to _ _ _ _ _ _ Ev1.

Subgoal 2.15:

Variables: FE EE O N EE2 Scope V X E Ty L Ctx1 Scope1
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) (Scope1::Ctx1)
Ctxs : ctx_names EE (Scope1::Ctx1)
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SN : exprNames (Scope1::Ctx1) E N
H5 : ctx_names (Scope::EE2) (Scope1::Ctx1)
============================
 ctx_names (((X, V)::Scope)::EE2) ((X::Scope1)::Ctx1)
 < backchain ctx_names_add.

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

Variables: FE EE_A EE_B Ctx Ctx' O N Len Scope EE1 Scope1 V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_list (is_list (is_pair is_string is_value)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names (Scope::EE_B) Ctx
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O *
============================
 exists EE_B', evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O
 < case IsS.

Subgoal 2.15:

Variables: FE EE_A EE_B Ctx Ctx' O N Len Scope EE1 Scope1 V X E Ty L
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names (Scope::EE_B) Ctx
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 exists EE_B', evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O
 < SN: case SN.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope EE1 Scope1 V X E Ty L Ctx1 Scope2
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
IsCtx : is_list (is_list is_string) (Scope2::Ctx1)
Ctxs : ctx_names (Scope::EE_B) (Scope2::Ctx1)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SN : exprNames (Scope2::Ctx1) E []
============================
 exists EE_B', evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O
 < EvB: apply IH_E to _ _ _ _ _ Ctxs SN EvA1 _.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope EE1 Scope1 V X E Ty L Ctx1 Scope2 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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
IsCtx : is_list (is_list is_string) (Scope2::Ctx1)
Ctxs : ctx_names (Scope::EE_B) (Scope2::Ctx1)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SN : exprNames (Scope2::Ctx1) E []
EvB : evalExpr FE (Scope::EE_B) E V EE_B' O
============================
 exists EE_B', evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O
 < C: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN EvB.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope EE1 Scope1 V X E Ty L Ctx1 Scope2 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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
IsCtx : is_list (is_list is_string) (Scope2::Ctx1)
Ctxs : ctx_names (Scope::EE_B) (Scope2::Ctx1)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SN : exprNames (Scope2::Ctx1) E []
EvB : evalExpr FE (Scope::EE_B) E V EE_B' O
C : ctx_names EE_B' (Scope2::Ctx1)
============================
 exists EE_B', evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O
 < case C.

Subgoal 2.15:

Variables: FE EE_A EE_B O N Len Scope EE1 Scope1 V X E Ty L Ctx1 Scope2 ARest A
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)) (Scope::EE_A)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope::EE_B)
IsCtx : is_list (is_list is_string) (Scope2::Ctx1)
Ctxs : ctx_names (Scope::EE_B) (Scope2::Ctx1)
EvA : evalStmt FE (Scope::EE_A) (secdecl L Ty X E) (((X, V)::Scope1)::EE1) O @
NNS : newNameScopes N Len EE_A EE_B
EvA1 : evalExpr FE (Scope::EE_A) E V (Scope1::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
SN : exprNames (Scope2::Ctx1) E []
EvB : evalExpr FE (Scope::EE_B) E V (A::ARest) O
H5 : forall K I, mem (K, I) A -> mem K Scope2
H6 : forall K, mem K Scope2 -> exists I, mem (K, I) A
H7 : ctx_names ARest Ctx1
============================
 exists EE_B', evalStmt FE (Scope::EE_B) (secdecl L Ty X E) EE_B' O
 < 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 3.15:

Variables: FE EE_A OA EE_B EE_B' OB EE1 Scope V X E Ty L
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'
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE EE_B (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE EE_A E V (Scope::EE1) OA *
============================
 OA = OB
 < case IsS.

Subgoal 3.15:

Variables: FE EE_A OA EE_B EE_B' OB EE1 Scope V X E Ty L
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE EE_B (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE EE_A E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 OA = OB
 < EvB: case EvB.

Subgoal 3.15:

Variables: FE EE_A OA EE_B OB EE1 Scope V X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 3.15:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
============================
 OB = OB
 < search.

Subgoal 4.15:

Variables: FE EE_A OA EE_B EE_B' OB EE1 Scope V X E Ty L
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'
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE EE_B (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE EE_A E V (Scope::EE1) OA *
============================
 scopes_same (((X, V)::Scope)::EE1) EE_B'
 < case IsS.

Subgoal 4.15:

Variables: FE EE_A OA EE_B EE_B' OB EE1 Scope V X E Ty L
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE EE_B (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE EE_A E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 scopes_same (((X, V)::Scope)::EE1) EE_B'
 < EvB: case EvB.

Subgoal 4.15:

Variables: FE EE_A OA EE_B OB EE1 Scope V X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
============================
 scopes_same (((X, V)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < SS': apply IH_E_C to _ _ _ _ _ EvA1 EvB.

Subgoal 4.15:

Variables: FE EE_A OA EE_B OB EE1 Scope V X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : scopes_same (Scope::EE1) (Scope1::EE2)
============================
 scopes_same (((X, V)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < apply IH_E to _ _ _ _ _ EvA1 EvB.

Subgoal 4.15:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : scopes_same (Scope::EE1) (Scope1::EE2)
============================
 scopes_same (((X, V1)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < SS': case SS'.

Subgoal 4.15:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
============================
 scopes_same (((X, V1)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < unfold .

Subgoal 4.15.1:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
============================
 forall X1 V, lookup ((X, V1)::Scope) X1 V -> lookup ((X, V1)::Scope1) X1 V
 < intros L.

Subgoal 4.15.1:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
L : lookup ((X, V1)::Scope) X1 V2
============================
 lookup ((X, V1)::Scope1) X1 V2
 < L: case L.

Subgoal 4.15.1.1:

Variables: FE EE_A EE_B OB EE1 Scope E Ty L EE2 Scope1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X1 E) (((X1, V2)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V2 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
EvB : evalExpr FE EE_B E V2 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
============================
 lookup ((X1, V2)::Scope1) X1 V2
 < search.

Subgoal 4.15.1.2:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
L : X = X1 -> false
L1 : lookup Scope X1 V2
============================
 lookup ((X, V1)::Scope1) X1 V2
 < apply SS' to L1.

Subgoal 4.15.1.2:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
L : X = X1 -> false
L1 : lookup Scope X1 V2
H5 : lookup Scope1 X1 V2
============================
 lookup ((X, V1)::Scope1) X1 V2
 < search.

Subgoal 4.15.2:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
============================
 forall X1 V, lookup ((X, V1)::Scope1) X1 V -> lookup ((X, V1)::Scope) X1 V
 < intros L.

Subgoal 4.15.2:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
L : lookup ((X, V1)::Scope1) X1 V2
============================
 lookup ((X, V1)::Scope) X1 V2
 < L: case L.

Subgoal 4.15.2.1:

Variables: FE EE_A EE_B OB EE1 Scope E Ty L EE2 Scope1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X1 E) (((X1, V2)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V2 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X1
H4 : is_expr E
EvB : evalExpr FE EE_B E V2 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
============================
 lookup ((X1, V2)::Scope) X1 V2
 < search.

Subgoal 4.15.2.2:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
L : X = X1 -> false
L1 : lookup Scope1 X1 V2
============================
 lookup ((X, V1)::Scope) X1 V2
 < apply SS'1 to L1.

Subgoal 4.15.2.2:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1 X1 V2
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
L : X = X1 -> false
L1 : lookup Scope1 X1 V2
H5 : lookup Scope X1 V2
============================
 lookup ((X, V1)::Scope) X1 V2
 < search.

Subgoal 4.15.3:

Variables: FE EE_A EE_B OB EE1 Scope X E Ty L EE2 Scope1 V1
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V1)::Scope)::EE1) OB @
EvA1 : evalExpr FE EE_A E V1 (Scope::EE1) OB *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V1 (Scope1::EE2) OB
SS' : forall X V, lookup Scope X V -> lookup Scope1 X V
SS'1 : forall X V, lookup Scope1 X V -> lookup Scope X V
SS'2 : scopes_same EE1 EE2
============================
 scopes_same EE1 EE2
 < 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 2.15:

Variables: FE EE_A O EE_B EE1 Scope V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsA : is_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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) O @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) O *
============================
 exists EE_B', evalStmt FE EE_B (secdecl L Ty X E) EE_B' O
 < case IsS.

Subgoal 2.15:

Variables: FE EE_A O EE_B EE1 Scope V X E Ty L
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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) O @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 exists EE_B', evalStmt FE EE_B (secdecl L Ty X E) EE_B' O
 < EvB: apply IH_E to _ _ _ _ SS EvA1.

Subgoal 2.15:

Variables: FE EE_A O EE_B EE1 Scope V X E Ty L 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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) O @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V EE_B' O
============================
 exists EE_B', evalStmt FE EE_B (secdecl L Ty X E) EE_B' O
 < SS': apply evalExpr_scopes_same_ctx to _ _ _ _ _ EvA1 EvB.

Subgoal 2.15:

Variables: FE EE_A O EE_B EE1 Scope V X E Ty L 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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) O @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V EE_B' O
SS' : scopes_same (Scope::EE1) EE_B'
============================
 exists EE_B', evalStmt FE EE_B (secdecl L Ty X E) EE_B' O
 < case SS' (keep).

Subgoal 2.15:

Variables: FE EE_A O EE_B EE1 Scope V X E Ty L BRest 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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) O @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V (B::BRest) O
SS' : scopes_same (Scope::EE1) (B::BRest)
H5 : forall X V, lookup Scope X V -> lookup B X V
H6 : forall X V, lookup B X V -> lookup Scope X V
H7 : scopes_same EE1 BRest
============================
 exists EE_B', evalStmt FE EE_B (secdecl L Ty X E) EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.15:

Variables: FE EE_A O EE_B EE1 Scope V X E Ty L BRest 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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) O @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V (B::BRest) O
SS' : scopes_same (Scope::EE1) (B::BRest)
H5 : forall X V, lookup Scope X V -> lookup B X V
H6 : forall X V, lookup B X V -> lookup Scope X V
H7 : scopes_same EE1 BRest
H8 : is_list (is_list (is_pair is_string is_value)) (Scope::EE1)
============================
 exists EE_B', evalStmt FE EE_B (secdecl L Ty X E) EE_B' O
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 2.15:

Variables: FE EE_A O EE_B EE1 Scope V X E Ty L BRest 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 : evalStmt FE EE_A (secdecl L Ty X E) (((X, V)::Scope)::EE1) O @
EvA1 : evalExpr FE EE_A E V (Scope::EE1) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE EE_B E V (B::BRest) O
SS' : scopes_same (Scope::EE1) (B::BRest)
H5 : forall X V, lookup Scope X V -> lookup B X V
H6 : forall X V, lookup B X V -> lookup Scope X V
H7 : scopes_same EE1 BRest
H8 : is_list (is_list (is_pair is_string is_value)) (Scope::EE1)
H9 : is_list (is_list (is_pair is_string is_value)) (B::BRest)
============================
 exists EE_B', evalStmt FE EE_B (secdecl L Ty X E) EE_B' O
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalExpr_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalExpr_backward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalStmt_forward.

Variables: Names FE EE EE' O E X Ty L
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalStmt FE EE (secdecl L Ty X E) EE' O
============================
 exists EE'', evalStmt FE EE (declare Ty X E) EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev.

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 exists EE'',
   evalStmt FE EE (declare Ty X E) EE'' O /\
   scopes_same (((X, V)::Scope)::EE2) EE''
 < exists ((X, V)::Scope)::EE2.

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 evalStmt FE EE (declare Ty X E) (((X, V)::Scope)::EE2) O /\
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < split.

Subgoal 1:

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 evalStmt FE EE (declare Ty X E) (((X, V)::Scope)::EE2) O
 < search.

Subgoal 2:

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < case IsS.

Subgoal 2:

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < apply evalExpr_isValue to _ _ _ Ev.

Subgoal 2:

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < IsEE2+: apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2:

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
IsEE2+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE2)
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < case IsEE2+.

Subgoal 2:

Variables: Names FE EE O E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
H6 : is_list (is_pair is_string is_value) Scope
H7 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < backchain scopes_same_reflexive.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalStmt_backward.

Variables: Names FE EE EE' O Ctx Ctx' E X Ty L
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalStmt FE EE (declare Ty X E) EE' O
============================
 exists EE'', evalStmt FE EE (secdecl L Ty X E) EE'' O /\ scopes_same EE' EE''
 < Ev: case Ev.

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 exists EE'',
   evalStmt FE EE (secdecl L Ty X E) EE'' O /\
   scopes_same (((X, V)::Scope)::EE2) EE''
 < exists ((X, V)::Scope)::EE2.

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O /\
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < split.

Subgoal 1:

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < search.

Subgoal 2:

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsCtx : is_list (is_list is_string) Ctx
Ctxs : ctx_names EE Ctx
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < case IsS.

Subgoal 2:

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < apply evalExpr_isValue to _ _ _ Ev.

Subgoal 2:

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < IsEE2+: apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2:

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
IsEE2+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE2)
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < case IsEE2+.

Subgoal 2:

Variables: Names FE EE O Ctx Ctx' E X Ty L EE2 Scope V
Pr : Names |{stmt}- secdecl L Ty X E ~~> declare Ty X E
Names : names EE Names
IsFE : is_list (is_pair is_string (is_pair is_string (is_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
SN : stmtNames Ctx (secdecl L Ty X E) [] Ctx'
Ev : evalExpr FE EE E V (Scope::EE2) O
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_value V
H6 : is_list (is_pair is_string is_value) Scope
H7 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 scopes_same (((X, V)::Scope)::EE2) (((X, V)::Scope)::EE2)
 < backchain scopes_same_reflexive.

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

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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
IsS : is_stmt (secdecl L Ty X E)
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < case IsS.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < apply ext_size_is_int_evalExpr to R2.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_integer N2
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < apply ext_size_pos_evalExpr to R2.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_integer N2
H6 : 0 <= N2
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < Acc: case Acc.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_integer N2
H6 : 0 <= N2
Acc : forall M, 0 <= M -> M < N -> acc M *
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < L: apply lt_plus_one to R1 _.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_integer N2
H6 : 0 <= N2
Acc : forall M, 0 <= M -> M < N -> acc M *
L : N2 < N
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < A: apply Acc to _ L.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_integer N2
H6 : 0 <= N2
Acc : forall M, 0 <= M -> M < N -> acc M *
L : N2 < N
A : acc N2 *
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < apply IH to R2 A _ _ _.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_integer N2
H6 : 0 <= N2
Acc : forall M, 0 <= M -> M < N -> acc M *
L : N2 < N
A : acc N2 *
H7 : <evalExpr {P}> FE EE E V (Scope::EE2) O
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < apply names_exists to IsEE.

Subgoal 4.15:

Variables: N FE EE O N2 EE2 Scope V X E Ty L 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 : <evalStmt {ES}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O N @@
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
R1 : 1 + N2 = N
R2 : <evalExpr {ES}> FE EE E V (Scope::EE2) O N2 **
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_integer N2
H6 : 0 <= N2
Acc : forall M, 0 <= M -> M < N -> acc M *
L : N2 < N
A : acc N2 *
H7 : <evalExpr {P}> FE EE E V (Scope::EE2) O
H8 : names EE N1
============================
 <evalStmt {P}> FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O
 < search.

Proof completed.
 < Prove exactEval:host:paramName_unique.

Subgoal 2:

Variables: NA NB L Ty
IH : forall P NA NB, is_param P -> paramName P NA * -> paramName P NB -> NA = NB
IsP : is_param (secparam NA Ty L)
PA : paramName (secparam NA Ty L) NA @
PB : paramName (secparam NA Ty L) NB
============================
 NA = NB
 < case PB.

Subgoal 2:

Variables: NB L Ty
IH : forall P NA NB, is_param P -> paramName P NA * -> paramName P NB -> NA = NB
IsP : is_param (secparam NB Ty L)
PA : paramName (secparam NB Ty L) NB @
============================
 NB = NB
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_paramName_forward.

Variables: N Ty Name L
Pr : |{param}- secparam Name Ty L ~~> param Name Ty
IsP : is_param (secparam Name Ty L)
PN : paramName (secparam Name Ty L) N
============================
 paramName (param Name Ty) N
 < case PN.

Variables: N Ty L
Pr : |{param}- secparam N Ty L ~~> param N Ty
IsP : is_param (secparam N Ty L)
============================
 paramName (param N Ty) N
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_paramName_back.

Variables: N Ty Name L
Pr : |{param}- secparam Name Ty L ~~> param Name Ty
IsP : is_param (secparam Name Ty L)
PN : paramName (param Name Ty) N
============================
 paramName (secparam Name Ty L) N
 < case PN.

Variables: N Ty L
Pr : |{param}- secparam N Ty L ~~> param N Ty
IsP : is_param (secparam N Ty L)
============================
 paramName (secparam N Ty L) N
 < search.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_unique.

Subgoal 2:

Variables: NA RA VA PA BA NB RB VB PB BB Params RetLev RetTy
IH : forall F NA RA VA PA BA NB RB VB PB BB,
       is_fun F -> getFunEvalInfo F NA RA VA PA BA * -> getFunEvalInfo F NB RB VB PB BB ->
       (((NA = NB /\ RA = RB) /\ VA = VB) /\ PA = PB) /\ BA = BB
IsF : is_fun (secfun NA RetTy RetLev RA VA Params BA)
GFEIA : getFunEvalInfo (secfun NA RetTy RetLev RA VA Params BA) NA RA VA PA BA @
GFEIB : getFunEvalInfo (secfun NA RetTy RetLev RA VA Params BA) NB RB VB PB BB
GFEIA1 : paramNames Params PA
============================
 (((NA = NB /\ RA = RB) /\ VA = VB) /\ PA = PB) /\ BA = BB
 < case IsF.

Subgoal 2:

Variables: NA RA VA PA BA NB RB VB PB BB Params RetLev RetTy
IH : forall F NA RA VA PA BA NB RB VB PB BB,
       is_fun F -> getFunEvalInfo F NA RA VA PA BA * -> getFunEvalInfo F NB RB VB PB BB ->
       (((NA = NB /\ RA = RB) /\ VA = VB) /\ PA = PB) /\ BA = BB
GFEIA : getFunEvalInfo (secfun NA RetTy RetLev RA VA Params BA) NA RA VA PA BA @
GFEIB : getFunEvalInfo (secfun NA RetTy RetLev RA VA Params BA) NB RB VB PB BB
GFEIA1 : paramNames Params PA
H1 : is_string NA
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RA
H5 : is_value VA
H6 : is_list is_param Params
H7 : is_stmt BA
============================
 (((NA = NB /\ RA = RB) /\ VA = VB) /\ PA = PB) /\ BA = BB
 < GFEIB: case GFEIB.

Subgoal 2:

Variables: PA NB RB VB PB BB Params RetLev RetTy
IH : forall F NA RA VA PA BA NB RB VB PB BB,
       is_fun F -> getFunEvalInfo F NA RA VA PA BA * -> getFunEvalInfo F NB RB VB PB BB ->
       (((NA = NB /\ RA = RB) /\ VA = VB) /\ PA = PB) /\ BA = BB
GFEIA : getFunEvalInfo (secfun NB RetTy RetLev RB VB Params BB) NB RB VB PA BB @
GFEIA1 : paramNames Params PA
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RB
H5 : is_value VB
H6 : is_list is_param Params
H7 : is_stmt BB
GFEIB : paramNames Params PB
============================
 (((NB = NB /\ RB = RB) /\ VB = VB) /\ PA = PB) /\ BB = BB
 < apply paramNames_unique to _ GFEIA1 GFEIB.

Subgoal 2:

Variables: NB RB VB PB BB Params RetLev RetTy
IH : forall F NA RA VA PA BA NB RB VB PB BB,
       is_fun F -> getFunEvalInfo F NA RA VA PA BA * -> getFunEvalInfo F NB RB VB PB BB ->
       (((NA = NB /\ RA = RB) /\ VA = VB) /\ PA = PB) /\ BA = BB
GFEIA : getFunEvalInfo (secfun NB RetTy RetLev RB VB Params BB) NB RB VB PB BB @
GFEIA1 : paramNames Params PB
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RB
H5 : is_value VB
H6 : is_list is_param Params
H7 : is_stmt BB
GFEIB : paramNames Params PB
============================
 (((NB = NB /\ RB = RB) /\ VB = VB) /\ PB = PB) /\ BB = BB
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_getFunEvalInfo_forward.

Variables: N R V P B Body Params RVVal RetVar RetTy Name RetLev
Pr : |{fun}- secfun Name RetTy RetLev RetVar RVVal Params Body ~~> fun Name RetTy RetVar RVVal Params Body
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
GFEI : getFunEvalInfo (secfun Name RetTy RetLev RetVar RVVal Params Body) N R V P B
============================
 getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body) N R V P B
 < case GFEI.

Variables: N R V P B Params RetTy RetLev
Pr : |{fun}- secfun N RetTy RetLev R V Params B ~~> fun N RetTy R V Params B
IsF : is_fun (secfun N RetTy RetLev R V Params B)
H1 : paramNames Params P
============================
 getFunEvalInfo (fun N RetTy R V Params B) N R V P B
 < search.

Proof completed.
 < Prove_Constraint exactEval:host:proj_getFunEvalInfo_back.

Variables: N R V P B Body Params RVVal RetVar RetTy Name RetLev
Pr : |{fun}- secfun Name RetTy RetLev RetVar RVVal Params Body ~~> fun Name RetTy RetVar RVVal Params Body
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
GFEI : getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body) N R V P B
============================
 getFunEvalInfo (secfun Name RetTy RetLev RetVar RVVal Params Body) N R V P B
 < case GFEI.

Variables: N R V P B Params RetTy RetLev
Pr : |{fun}- secfun N RetTy RetLev R V Params B ~~> fun N RetTy R V Params B
IsF : is_fun (secfun N RetTy RetLev R V Params B)
H1 : paramNames Params P
============================
 getFunEvalInfo (secfun N RetTy RetLev R V Params B) N R V P B
 < search.

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

Variables: FT ET ET' FE EE O EE2 Scope V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
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 : stmtOK FT ET (secdecl L Ty X E) ET'
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 E V (Scope::EE2) O *
============================
 related_all_scopes ET' (((X, V)::Scope)::EE2)
 < case IsS.

Subgoal 3.15:

Variables: FT ET ET' FE EE O EE2 Scope V X E Ty L
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 : stmtOK FT ET (secdecl L Ty X E) ET'
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 related_all_scopes ET' (((X, V)::Scope)::EE2)
 < Ty: case Ty.

Subgoal 3.15:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
============================
 related_all_scopes (((X, Ty)::Scope1)::RestTC) (((X, V)::Scope)::EE2)
 < apply IH_T_E to _ _ _ _ _ Ty1 Ev1 _ _.

Subgoal 3.15:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
============================
 related_all_scopes (((X, Ty)::Scope1)::RestTC) (((X, V)::Scope)::EE2)
 < R: apply IH_C_E to _ _ _ _ _ Ty1 Ev1 _ _.

Subgoal 3.15:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : related_all_scopes (Scope1::RestTC) (Scope::EE2)
============================
 related_all_scopes (((X, Ty)::Scope1)::RestTC) (((X, V)::Scope)::EE2)
 < R: case R.

Subgoal 3.15:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
============================
 related_all_scopes (((X, Ty)::Scope1)::RestTC) (((X, V)::Scope)::EE2)
 < unfold .

Subgoal 3.15.1:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
============================
 forall X1 T,
   lookup ((X, Ty)::Scope1) X1 T -> exists V1,
     lookup ((X, V)::Scope) X1 V1 /\ valueType V1 T
 < intros L.

Subgoal 3.15.1:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1 T
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
L : lookup ((X, Ty)::Scope1) X1 T
============================
 exists V1, lookup ((X, V)::Scope) X1 V1 /\ valueType V1 T
 < L: case L.

Subgoal 3.15.1.1:

Variables: FT FE EE O EE2 Scope V E L RestTC Scope1 X1 T
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L T X1 E) (((X1, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ T
H3 : is_string X1
H4 : is_expr E
Ty : no_lookup Scope1 X1
Ty1 : typeOf FT (Scope1::RestTC) E T
H5 : valueType V T
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
============================
 exists V1, lookup ((X1, V)::Scope) X1 V1 /\ valueType V1 T
 < search.

Subgoal 3.15.1.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1 T
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
L : X = X1 -> false
L1 : lookup Scope1 X1 T
============================
 exists V1, lookup ((X, V)::Scope) X1 V1 /\ valueType V1 T
 < apply R to L1.

Subgoal 3.15.1.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1 T V1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
L : X = X1 -> false
L1 : lookup Scope1 X1 T
H6 : lookup Scope X1 V1
H7 : valueType V1 T
============================
 exists V1, lookup ((X, V)::Scope) X1 V1 /\ valueType V1 T
 < exists V1.

Subgoal 3.15.1.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1 T V1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
L : X = X1 -> false
L1 : lookup Scope1 X1 T
H6 : lookup Scope X1 V1
H7 : valueType V1 T
============================
 lookup ((X, V)::Scope) X1 V1 /\ valueType V1 T
 < split.

Subgoal 3.15.1.2.1:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1 T V1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
L : X = X1 -> false
L1 : lookup Scope1 X1 T
H6 : lookup Scope X1 V1
H7 : valueType V1 T
============================
 lookup ((X, V)::Scope) X1 V1
 < search.

Subgoal 3.15.1.2.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1 T V1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
L : X = X1 -> false
L1 : lookup Scope1 X1 T
H6 : lookup Scope X1 V1
H7 : valueType V1 T
============================
 valueType V1 T
 < search.

Subgoal 3.15.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
============================
 forall X1, no_lookup ((X, Ty)::Scope1) X1 -> no_lookup ((X, V)::Scope) X1
 < intros N.

Subgoal 3.15.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
N : no_lookup ((X, Ty)::Scope1) X1
============================
 no_lookup ((X, V)::Scope) X1
 < N: case N.

Subgoal 3.15.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
N : X = X1 -> false
N1 : no_lookup Scope1 X1
============================
 no_lookup ((X, V)::Scope) X1
 < apply R1 to N1.

Subgoal 3.15.2:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1 X1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
N : X = X1 -> false
N1 : no_lookup Scope1 X1
H6 : no_lookup Scope X1
============================
 no_lookup ((X, V)::Scope) X1
 < search.

Subgoal 3.15.3:

Variables: FT FE EE O EE2 Scope V X E Ty L RestTC Scope1
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)) (Scope1::RestTC)
IsFE : is_list (is_pair is_string (is_pair is_string (is_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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) 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 (Scope1::RestTC) EE
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Ty : no_lookup Scope1 X
Ty1 : typeOf FT (Scope1::RestTC) E Ty
H5 : valueType V Ty
R : forall X T, lookup Scope1 X T -> exists V, lookup Scope X V /\ valueType V T
R1 : forall X, no_lookup Scope1 X -> no_lookup Scope X
R2 : related_all_scopes RestTC EE2
============================
 related_all_scopes RestTC EE2
 < search.

Proof completed.
 < Prove exactEval:host:paramTy_paramName_same.

Subgoal 2:

Variables: NT T N L
IH : forall P NT T N, paramTy P NT T * -> paramName P N -> NT = N
PT : paramTy (secparam NT T L) NT T @
PN : paramName (secparam NT T L) N
============================
 NT = N
 < case PN.

Subgoal 2:

Variables: T N L
IH : forall P NT T N, paramTy P NT T * -> paramName P N -> NT = N
PT : paramTy (secparam N T L) N T @
============================
 N = N
 < search.

Proof completed.
 < Prove exactEval:host:funOK_getFunEvalInfo_related.

Subgoal 2:

Variables: FT Name RetVar RVVal PNames Body ParamTys FinalTC PTys Body1 Params RVVal1 RetVar1 RetLev RetTy FunName
IH : forall F FT Name RetVar RVVal PNames Body,
       is_fun F -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
       funOK FT F * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists RetTy ArgTys Scope TyEnv',
         (((lookup FT Name (RetTy, ArgTys) /\ zip PNames ArgTys Scope) /\
         valueType RVVal RetTy) /\
         stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') /\
         lookup FT Name (RetTy, ArgTys)
IsF : is_fun (secfun FunName RetTy RetLev RetVar1 RVVal1 Params Body1)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
FOK : funOK FT (secfun FunName RetTy RetLev RetVar1 RVVal1 Params Body1) @
GFEI : getFunEvalInfo (secfun FunName RetTy RetLev RetVar1 RVVal1 Params Body1) Name RetVar RVVal PNames Body
FOK1 : paramTys Params ParamTys
FOK2 : stmtOK FT [(RetVar1, RetTy)::ParamTys] Body1 FinalTC
FOK3 : lookup FT FunName (RetTy, PTys)
FOK4 : values ParamTys PTys
FOK5 : no_lookup ParamTys RetVar1
FOK6 : valueType RVVal1 RetTy
============================
 exists RetTy ArgTys Scope TyEnv',
   (((lookup FT Name (RetTy, ArgTys) /\ zip PNames ArgTys Scope) /\
   valueType RVVal RetTy) /\
   stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') /\
   lookup FT Name (RetTy, ArgTys)
 < GFEI: case GFEI.

Subgoal 2:

Variables: FT Name RetVar RVVal PNames Body ParamTys FinalTC PTys Params RetLev RetTy
IH : forall F FT Name RetVar RVVal PNames Body,
       is_fun F -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
       funOK FT F * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists RetTy ArgTys Scope TyEnv',
         (((lookup FT Name (RetTy, ArgTys) /\ zip PNames ArgTys Scope) /\
         valueType RVVal RetTy) /\
         stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') /\
         lookup FT Name (RetTy, ArgTys)
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
FOK : funOK FT (secfun Name RetTy RetLev RetVar RVVal Params Body) @
FOK1 : paramTys Params ParamTys
FOK2 : stmtOK FT [(RetVar, RetTy)::ParamTys] Body FinalTC
FOK3 : lookup FT Name (RetTy, PTys)
FOK4 : values ParamTys PTys
FOK5 : no_lookup ParamTys RetVar
FOK6 : valueType RVVal RetTy
GFEI : paramNames Params PNames
============================
 exists RetTy ArgTys Scope TyEnv',
   (((lookup FT Name (RetTy, ArgTys) /\ zip PNames ArgTys Scope) /\
   valueType RVVal RetTy) /\
   stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') /\
   lookup FT Name (RetTy, ArgTys)
 < Z: apply paramTys_values_names_zip_same to FOK1 FOK4 GFEI.

Subgoal 2:

Variables: FT Name RetVar RVVal PNames Body ParamTys FinalTC PTys Params RetLev RetTy
IH : forall F FT Name RetVar RVVal PNames Body,
       is_fun F -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
       funOK FT F * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists RetTy ArgTys Scope TyEnv',
         (((lookup FT Name (RetTy, ArgTys) /\ zip PNames ArgTys Scope) /\
         valueType RVVal RetTy) /\
         stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') /\
         lookup FT Name (RetTy, ArgTys)
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
FOK : funOK FT (secfun Name RetTy RetLev RetVar RVVal Params Body) @
FOK1 : paramTys Params ParamTys
FOK2 : stmtOK FT [(RetVar, RetTy)::ParamTys] Body FinalTC
FOK3 : lookup FT Name (RetTy, PTys)
FOK4 : values ParamTys PTys
FOK5 : no_lookup ParamTys RetVar
FOK6 : valueType RVVal RetTy
GFEI : paramNames Params PNames
Z : zip PNames PTys ParamTys
============================
 exists RetTy ArgTys Scope TyEnv',
   (((lookup FT Name (RetTy, ArgTys) /\ zip PNames ArgTys Scope) /\
   valueType RVVal RetTy) /\
   stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') /\
   lookup FT Name (RetTy, ArgTys)
 < exists RetTy,
   PTys,
   ParamTys,
   FinalTC.

Subgoal 2:

Variables: FT Name RetVar RVVal PNames Body ParamTys FinalTC PTys Params RetLev RetTy
IH : forall F FT Name RetVar RVVal PNames Body,
       is_fun F -> is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT ->
       funOK FT F * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists RetTy ArgTys Scope TyEnv',
         (((lookup FT Name (RetTy, ArgTys) /\ zip PNames ArgTys Scope) /\
         valueType RVVal RetTy) /\
         stmtOK FT [(RetVar, RetTy)::Scope] Body TyEnv') /\
         lookup FT Name (RetTy, ArgTys)
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
IsFT : is_list (is_pair is_string (is_pair is_typ (is_list is_typ))) FT
FOK : funOK FT (secfun Name RetTy RetLev RetVar RVVal Params Body) @
FOK1 : paramTys Params ParamTys
FOK2 : stmtOK FT [(RetVar, RetTy)::ParamTys] Body FinalTC
FOK3 : lookup FT Name (RetTy, PTys)
FOK4 : values ParamTys PTys
FOK5 : no_lookup ParamTys RetVar
FOK6 : valueType RVVal RetTy
GFEI : paramNames Params PNames
Z : zip PNames PTys ParamTys
============================
 (((lookup FT Name (RetTy, PTys) /\ zip PNames PTys ParamTys) /\
 valueType RVVal RetTy) /\
 stmtOK FT [(RetVar, RetTy)::ParamTys] Body FinalTC) /\
 lookup FT Name (RetTy, PTys)
 < search.

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

Subgoal 2.15:

Variables: FE EE O EE2 Scope V X E Ty L
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
IsS : is_stmt (secdecl L Ty X E)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ev : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
============================
 output_forms O
 < case IsS.

Subgoal 2.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 output_forms O
 < apply IH_E to _ _ _ Ev1.

Subgoal 2.15:

Variables: FE EE O EE2 Scope V X E Ty L
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 : evalStmt FE EE (secdecl L Ty X E) (((X, V)::Scope)::EE2) O @
Ev1 : evalExpr FE EE E V (Scope::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : output_forms O
============================
 output_forms O
 < search.

Proof completed.
 < Prove exactEval:host:evalProgram_output_forms.

Proof completed.
 < Prove exactEval:host:paramName_exists.

Subgoal 2:

Variables: Slev Typ S
IH : forall P, is_param P * -> exists N, paramName P N
IsP : is_param (secparam S Typ Slev) @
IsP1 : is_string S
IsP2 : is_typ Typ
IsP3 : is_slev Slev
============================
 exists N, paramName (secparam S Typ Slev) N
 < search.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_exists.

Subgoal 2:

Variables: Stmt L Value S Slev Typ S1
IH : forall F, is_fun F * -> exists N R V P B, getFunEvalInfo F N R V P B
IsF : is_fun (secfun S1 Typ Slev S Value L Stmt) @
IsF1 : is_string S1
IsF2 : is_typ Typ
IsF3 : is_slev Slev
IsF4 : is_string S
IsF5 : is_value Value
IsF6 : is_list is_param L
IsF7 : is_stmt Stmt
============================
 exists N R V P B, getFunEvalInfo (secfun S1 Typ Slev S Value L Stmt) N R V P B
 < apply paramNames_exists to IsF6.

Subgoal 2:

Variables: Stmt L Value S Slev Typ S1 Ns
IH : forall F, is_fun F * -> exists N R V P B, getFunEvalInfo F N R V P B
IsF : is_fun (secfun S1 Typ Slev S Value L Stmt) @
IsF1 : is_string S1
IsF2 : is_typ Typ
IsF3 : is_slev Slev
IsF4 : is_string S
IsF5 : is_value Value
IsF6 : is_list is_param L
IsF7 : is_stmt Stmt
H1 : paramNames L Ns
============================
 exists N R V P B, getFunEvalInfo (secfun S1 Typ Slev S Value L Stmt) N R V P B
 < search.

Proof completed.
 < Extensible_Theorem
      join_is : forall L1 L2 R,
         Is1 : is_slev L1 ->
         Is2 : is_slev L2 ->
         J : join L1 L2 R ->
         is_slev R
      on J.

Subgoal 1:

IH : forall L1 L2 R, is_slev L1 -> is_slev L2 -> join L1 L2 R * -> is_slev R
Is1 : is_slev public
Is2 : is_slev public
J : join public public public @
============================
 is_slev public
 < search.

Subgoal 2:

Variables: L2
IH : forall L1 L2 R, is_slev L1 -> is_slev L2 -> join L1 L2 R * -> is_slev R
Is1 : is_slev private
Is2 : is_slev L2
J : join private L2 private @
============================
 is_slev private
 < search.

Subgoal 3:

Variables: L1
IH : forall L1 L2 R, is_slev L1 -> is_slev L2 -> join L1 L2 R * -> is_slev R
Is1 : is_slev L1
Is2 : is_slev private
J : join L1 private private @
============================
 is_slev private
 < search.

Proof completed.
 < Extensible_Theorem
      join_private_right : forall L R,
         Is : is_slev L ->
         J : join L private R ->
         R = private
      on J.

Subgoal 1:

IH : forall L R, is_slev L -> join L private R * -> R = private
Is : is_slev private
J : join private private private @
============================
 private = private
 < search.

Subgoal 2:

Variables: L
IH : forall L R, is_slev L -> join L private R * -> R = private
Is : is_slev L
J : join L private private @
============================
 private = private
 < search.

Proof completed.
 < Extensible_Theorem
      join_unique : forall L1 L2 LA LB,
         Is1 : is_slev L1 ->
         Is2 : is_slev L2 ->
         JA : join L1 L2 LA ->
         JB : join L1 L2 LB ->
         LA = LB
      on JA.

Subgoal 1:

Variables: LB
IH : forall L1 L2 LA LB,
       is_slev L1 -> is_slev L2 -> join L1 L2 LA * -> join L1 L2 LB -> LA = LB
Is1 : is_slev public
Is2 : is_slev public
JA : join public public public @
JB : join public public LB
============================
 public = LB
 < JB: case JB.

Subgoal 1:

IH : forall L1 L2 LA LB,
       is_slev L1 -> is_slev L2 -> join L1 L2 LA * -> join L1 L2 LB -> LA = LB
Is1 : is_slev public
Is2 : is_slev public
JA : join public public public @
============================
 public = public
 < search.

Subgoal 2:

Variables: L2 LB
IH : forall L1 L2 LA LB,
       is_slev L1 -> is_slev L2 -> join L1 L2 LA * -> join L1 L2 LB -> LA = LB
Is1 : is_slev private
Is2 : is_slev L2
JA : join private L2 private @
JB : join private L2 LB
============================
 private = LB
 < JB: case JB.

Subgoal 2.1:

Variables: L2
IH : forall L1 L2 LA LB,
       is_slev L1 -> is_slev L2 -> join L1 L2 LA * -> join L1 L2 LB -> LA = LB
Is1 : is_slev private
Is2 : is_slev L2
JA : join private L2 private @
============================
 private = private
 < search.

Subgoal 2.2:

IH : forall L1 L2 LA LB,
       is_slev L1 -> is_slev L2 -> join L1 L2 LA * -> join L1 L2 LB -> LA = LB
Is1 : is_slev private
Is2 : is_slev private
JA : join private private private @
============================
 private = private
 < search.

Subgoal 3:

Variables: L1 LB
IH : forall L1 L2 LA LB,
       is_slev L1 -> is_slev L2 -> join L1 L2 LA * -> join L1 L2 LB -> LA = LB
Is1 : is_slev L1
Is2 : is_slev private
JA : join L1 private private @
JB : join L1 private LB
============================
 private = LB
 < apply join_private_right to _ JB.

Subgoal 3:

Variables: L1
IH : forall L1 L2 LA LB,
       is_slev L1 -> is_slev L2 -> join L1 L2 LA * -> join L1 L2 LB -> LA = LB
Is1 : is_slev L1
Is2 : is_slev private
JA : join L1 private private @
JB : join L1 private private
============================
 private = private
 < search.

Proof completed.
 < Extensible_Theorem
      join_private : forall L1 L2,
         Is1 : is_slev L1 ->
         Is2 : is_slev L2 ->
         J : join L1 L2 private ->
         L1 = private \/
         L2 = private
      on J.

Subgoal 1:

Variables: L2
IH : forall L1 L2,
       is_slev L1 -> is_slev L2 -> join L1 L2 private * -> L1 = private \/
       L2 = private
Is1 : is_slev private
Is2 : is_slev L2
J : join private L2 private @
============================
 private = private \/ L2 = private
 < search.

Subgoal 2:

Variables: L1
IH : forall L1 L2,
       is_slev L1 -> is_slev L2 -> join L1 L2 private * -> L1 = private \/
       L2 = private
Is1 : is_slev L1
Is2 : is_slev private
J : join L1 private private @
============================
 L1 = private \/ private = private
 < search.

Proof completed.
 < Extensible_Theorem
      join_public : forall L1 L2,
         Is1 : is_slev L1 ->
         Is2 : is_slev L2 ->
         J : join L1 L2 public ->
         L1 = public /\
         L2 = public
      on J.

IH : forall L1 L2,
       is_slev L1 -> is_slev L2 -> join L1 L2 public * -> L1 = public /\
       L2 = public
Is1 : is_slev public
Is2 : is_slev public
J : join public public public @
============================
 public = public /\ public = public
 < search.

Proof completed.
 < Theorem lookup_is_slev :
     forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev -> is_slev Lev.

============================
 forall L X Lev,
   is_list (is_pair is_string is_slev) L -> lookup L X Lev -> is_slev Lev
 < induction on 2.

IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
============================
 forall L X Lev,
   is_list (is_pair is_string is_slev) L -> lookup L X Lev @ -> is_slev Lev
 < intros Is L.

Variables: L X Lev
IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
Is : is_list (is_pair is_string is_slev) L
L : lookup L X Lev @
============================
 is_slev Lev
 < L: case L.

Subgoal 1:

Variables: X Lev Rest
IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
Is : is_list (is_pair is_string is_slev) ((X, Lev)::Rest)
============================
 is_slev Lev
 < Is: case Is.

Subgoal 1:

Variables: X Lev Rest
IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
Is : is_pair is_string is_slev (X, Lev)
Is1 : is_list (is_pair is_string is_slev) Rest
============================
 is_slev Lev
 < case Is.

Subgoal 1:

Variables: X Lev Rest
IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
Is1 : is_list (is_pair is_string is_slev) Rest
H1 : is_string X
H2 : is_slev Lev
============================
 is_slev Lev
 < search.

Subgoal 2:

Variables: X Lev Rest V K
IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
Is : is_list (is_pair is_string is_slev) ((K, V)::Rest)
L : K = X -> false
L1 : lookup Rest X Lev *
============================
 is_slev Lev
 < case Is.

Subgoal 2:

Variables: X Lev Rest V K
IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
L : K = X -> false
L1 : lookup Rest X Lev *
H1 : is_pair is_string is_slev (K, V)
H2 : is_list (is_pair is_string is_slev) Rest
============================
 is_slev Lev
 < apply IH to _ L1.

Subgoal 2:

Variables: X Lev Rest V K
IH : forall L X Lev,
       is_list (is_pair is_string is_slev) L -> lookup L X Lev * -> is_slev Lev
L : K = X -> false
L1 : lookup Rest X Lev *
H1 : is_pair is_string is_slev (K, V)
H2 : is_list (is_pair is_string is_slev) Rest
H3 : is_slev Lev
============================
 is_slev Lev
 < search.

Proof completed.
 < Theorem lookupScopes_is_slev :
     forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev ->
       is_slev Lev.

============================
 forall SG X Lev,
   is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev -> is_slev Lev
 < induction on 2.

IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
============================
 forall SG X Lev,
   is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev @ ->
   is_slev Lev
 < intros Is LS.

Variables: SG X Lev
IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
Is : is_list (is_list (is_pair is_string is_slev)) SG
LS : lookupScopes X SG Lev @
============================
 is_slev Lev
 < LS: case LS.

Subgoal 1:

Variables: X Lev Rest L
IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
Is : is_list (is_list (is_pair is_string is_slev)) (L::Rest)
LS : lookup L X Lev
============================
 is_slev Lev
 < case Is.

Subgoal 1:

Variables: X Lev Rest L
IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
LS : lookup L X Lev
H1 : is_list (is_pair is_string is_slev) L
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
============================
 is_slev Lev
 < apply lookup_is_slev to _ LS.

Subgoal 1:

Variables: X Lev Rest L
IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
LS : lookup L X Lev
H1 : is_list (is_pair is_string is_slev) L
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
H3 : is_slev Lev
============================
 is_slev Lev
 < search.

Subgoal 2:

Variables: X Lev Rest L
IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
Is : is_list (is_list (is_pair is_string is_slev)) (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest Lev *
============================
 is_slev Lev
 < case Is.

Subgoal 2:

Variables: X Lev Rest L
IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
LS : no_lookup L X
LS1 : lookupScopes X Rest Lev *
H1 : is_list (is_pair is_string is_slev) L
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
============================
 is_slev Lev
 < apply IH to _ LS1.

Subgoal 2:

Variables: X Lev Rest L
IH : forall SG X Lev,
       is_list (is_list (is_pair is_string is_slev)) SG -> lookupScopes X SG Lev * ->
       is_slev Lev
LS : no_lookup L X
LS1 : lookupScopes X Rest Lev *
H1 : is_list (is_pair is_string is_slev) L
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
H3 : is_slev Lev
============================
 is_slev Lev
 < search.

Proof completed.
 < Theorem lookupSecFun_is :
     forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) ->
       is_slev Lev /\ is_list is_slev PLs.

============================
 forall SF F Lev PLs,
   is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) ->
   is_slev Lev /\ is_list is_slev PLs
 < induction on 2.

IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
============================
 forall SF F Lev PLs,
   is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) @ ->
   is_slev Lev /\ is_list is_slev PLs
 < intros Is L.

Variables: SF F Lev PLs
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
Is : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
L : lookup SF F (Lev, PLs) @
============================
 is_slev Lev /\ is_list is_slev PLs
 < L: case L.

Subgoal 1:

Variables: F Lev PLs Rest
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
Is : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) ((F, (Lev, PLs))::Rest)
============================
 is_slev Lev /\ is_list is_slev PLs
 < Is: case Is.

Subgoal 1:

Variables: F Lev PLs Rest
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
Is : is_pair is_string (is_pair is_slev (is_list is_slev)) (F, (Lev, PLs))
Is1 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) Rest
============================
 is_slev Lev /\ is_list is_slev PLs
 < Is: case Is.

Subgoal 1:

Variables: F Lev PLs Rest
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
Is1 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) Rest
Is : is_string F
Is2 : is_pair is_slev (is_list is_slev) (Lev, PLs)
============================
 is_slev Lev /\ is_list is_slev PLs
 < case Is2.

Subgoal 1:

Variables: F Lev PLs Rest
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
Is1 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) Rest
Is : is_string F
H1 : is_slev Lev
H2 : is_list is_slev PLs
============================
 is_slev Lev /\ is_list is_slev PLs
 < search.

Subgoal 2:

Variables: F Lev PLs Rest V K
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
Is : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) ((K, V)::Rest)
L : K = F -> false
L1 : lookup Rest F (Lev, PLs) *
============================
 is_slev Lev /\ is_list is_slev PLs
 < case Is.

Subgoal 2:

Variables: F Lev PLs Rest V K
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
L : K = F -> false
L1 : lookup Rest F (Lev, PLs) *
H1 : is_pair is_string (is_pair is_slev (is_list is_slev)) (K, V)
H2 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) Rest
============================
 is_slev Lev /\ is_list is_slev PLs
 < apply IH to _ L1.

Subgoal 2:

Variables: F Lev PLs Rest V K
IH : forall SF F Lev PLs,
       is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF -> lookup SF F (Lev, PLs) * ->
       is_slev Lev /\ is_list is_slev PLs
L : K = F -> false
L1 : lookup Rest F (Lev, PLs) *
H1 : is_pair is_string (is_pair is_slev (is_list is_slev)) (K, V)
H2 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) Rest
H3 : is_slev Lev
H4 : is_list is_slev PLs
============================
 is_slev Lev /\ is_list is_slev PLs
 < search.

Proof completed.
 < Theorem domain_is_sec :
     forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D -> is_list is_string D.

============================
 forall L D,
   is_list (is_pair is_string is_slev) L -> domain L D -> is_list is_string D
 < induction on 2.

IH : forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D * -> is_list is_string D
============================
 forall L D,
   is_list (is_pair is_string is_slev) L -> domain L D @ -> is_list is_string D
 < intros Is D.

Variables: L D
IH : forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D * -> is_list is_string D
Is : is_list (is_pair is_string is_slev) L
D : domain L D @
============================
 is_list is_string D
 < D: case D.

Subgoal 1:

IH : forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D * -> is_list is_string D
Is : is_list (is_pair is_string is_slev) []
============================
 is_list is_string []
 < search.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D * -> is_list is_string D
Is : is_list (is_pair is_string is_slev) ((A, B)::Rest)
D : domain Rest DRest *
============================
 is_list is_string (A::DRest)
 < Is: case Is.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D * -> is_list is_string D
D : domain Rest DRest *
Is : is_pair is_string is_slev (A, B)
Is1 : is_list (is_pair is_string is_slev) Rest
============================
 is_list is_string (A::DRest)
 < case Is.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D * -> is_list is_string D
D : domain Rest DRest *
Is1 : is_list (is_pair is_string is_slev) Rest
H1 : is_string A
H2 : is_slev B
============================
 is_list is_string (A::DRest)
 < apply IH to _ D.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_slev) L -> domain L D * -> is_list is_string D
D : domain Rest DRest *
Is1 : is_list (is_pair is_string is_slev) Rest
H1 : is_string A
H2 : is_slev B
H3 : is_list is_string DRest
============================
 is_list is_string (A::DRest)
 < search.

Proof completed.
 < Theorem names_is_sec :
     forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names -> is_list is_string Names.

============================
 forall SG Names,
   is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names -> is_list is_string Names
 < induction on 2.

IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
============================
 forall SG Names,
   is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names @ -> is_list is_string Names
 < intros Is N.

Variables: SG Names
IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
Is : is_list (is_list (is_pair is_string is_slev)) SG
N : names SG Names @
============================
 is_list is_string Names
 < N: case N.

Subgoal 1:

IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
Is : is_list (is_list (is_pair is_string is_slev)) []
============================
 is_list is_string []
 < search.

Subgoal 2:

Variables: Names NScope NRest Rest Scope
IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
Is : is_list (is_list (is_pair is_string is_slev)) (Scope::Rest)
N : domain Scope NScope
N1 : names Rest NRest *
N2 : NScope ++ NRest = Names
============================
 is_list is_string Names
 < case Is.

Subgoal 2:

Variables: Names NScope NRest Rest Scope
IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
N : domain Scope NScope
N1 : names Rest NRest *
N2 : NScope ++ NRest = Names
H1 : is_list (is_pair is_string is_slev) Scope
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
============================
 is_list is_string Names
 < apply domain_is_sec to _ N.

Subgoal 2:

Variables: Names NScope NRest Rest Scope
IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
N : domain Scope NScope
N1 : names Rest NRest *
N2 : NScope ++ NRest = Names
H1 : is_list (is_pair is_string is_slev) Scope
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
H3 : is_list is_string NScope
============================
 is_list is_string Names
 < apply IH to _ N1.

Subgoal 2:

Variables: Names NScope NRest Rest Scope
IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
N : domain Scope NScope
N1 : names Rest NRest *
N2 : NScope ++ NRest = Names
H1 : is_list (is_pair is_string is_slev) Scope
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
H3 : is_list is_string NScope
H4 : is_list is_string NRest
============================
 is_list is_string Names
 < apply append_list_string_is to _ _ N2.

Subgoal 2:

Variables: Names NScope NRest Rest Scope
IH : forall SG Names,
       is_list (is_list (is_pair is_string is_slev)) SG -> names SG Names * -> is_list is_string Names
N : domain Scope NScope
N1 : names Rest NRest *
N2 : NScope ++ NRest = Names
H1 : is_list (is_pair is_string is_slev) Scope
H2 : is_list (is_list (is_pair is_string is_slev)) Rest
H3 : is_list is_string NScope
H4 : is_list is_string NRest
H5 : is_list is_string Names
============================
 is_list is_string Names
 < search.

Proof completed.
 < Theorem mem_is_sec :
     forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L -> is_pair is_string is_slev IDS.

============================
 forall L IDS,
   is_list (is_pair is_string is_slev) L -> mem IDS L -> is_pair is_string is_slev IDS
 < induction on 2.

IH : forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L * -> is_pair is_string is_slev IDS
============================
 forall L IDS,
   is_list (is_pair is_string is_slev) L -> mem IDS L @ -> is_pair is_string is_slev IDS
 < intros Is M.

Variables: L IDS
IH : forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L * -> is_pair is_string is_slev IDS
Is : is_list (is_pair is_string is_slev) L
M : mem IDS L @
============================
 is_pair is_string is_slev IDS
 < M: case M.

Subgoal 1:

Variables: IDS Rest
IH : forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L * -> is_pair is_string is_slev IDS
Is : is_list (is_pair is_string is_slev) (IDS::Rest)
============================
 is_pair is_string is_slev IDS
 < case Is.

Subgoal 1:

Variables: IDS Rest
IH : forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L * -> is_pair is_string is_slev IDS
H1 : is_pair is_string is_slev IDS
H2 : is_list (is_pair is_string is_slev) Rest
============================
 is_pair is_string is_slev IDS
 < search.

Subgoal 2:

Variables: IDS Rest I
IH : forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L * -> is_pair is_string is_slev IDS
Is : is_list (is_pair is_string is_slev) (I::Rest)
M : mem IDS Rest *
============================
 is_pair is_string is_slev IDS
 < case Is.

Subgoal 2:

Variables: IDS Rest I
IH : forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L * -> is_pair is_string is_slev IDS
M : mem IDS Rest *
H1 : is_pair is_string is_slev I
H2 : is_list (is_pair is_string is_slev) Rest
============================
 is_pair is_string is_slev IDS
 < apply IH to _ M.

Subgoal 2:

Variables: IDS Rest I
IH : forall L IDS,
       is_list (is_pair is_string is_slev) L -> mem IDS L * -> is_pair is_string is_slev IDS
M : mem IDS Rest *
H1 : is_pair is_string is_slev I
H2 : is_list (is_pair is_string is_slev) Rest
H3 : is_pair is_string is_slev IDS
============================
 is_pair is_string is_slev IDS
 < search.

Proof completed.
 < Extensible_Theorem
      level_is : forall SF SG PC E L,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         Lev : level SF SG PC E L ->
         is_slev L
      on Lev as IH_E,
      secure_is : forall SF SG PC S SG',
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         Sec : secure SF SG PC S SG' ->
         is_list (is_list (is_pair is_string is_slev)) SG'
      on Sec as IH_Salso
   
      levelArgs_is : forall SF SG PC A L,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         Lev : levelArgs SF SG PC A L ->
         is_list is_slev L
      on Lev as IH_A,
      levelRecFields_is : forall SF SG PC RF L,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         Lev : levelRecFields SF SG PC RF L ->
         is_slev L
      on Lev as IH_RF.

Subgoal 1.1:

Variables: SF SG PC I
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (num I) public @
============================
 is_slev public
 < search.

Subgoal 1.2:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (plus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.2:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (plus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.2:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (plus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.2:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (plus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 1.2:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (plus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.3:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (minus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.3:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (minus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.3:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (minus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.3:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (minus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 1.3:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (minus E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.4:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (mult E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.4:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (mult E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.4:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (mult E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.4:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (mult E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 1.4:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (mult E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.5:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (div E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.5:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (div E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.5:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (div E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.5:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (div E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 1.5:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (div E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.6:

Variables: SF SG PC
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC true public @
============================
 is_slev public
 < search.

Subgoal 1.7:

Variables: SF SG PC
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC false public @
============================
 is_slev public
 < search.

Subgoal 1.8:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (and E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.8:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (and E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.8:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (and E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev3.

Subgoal 1.8:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (and E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev4.

Subgoal 1.8:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (and E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.9:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (or E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.9:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (or E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.9:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (or E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev3.

Subgoal 1.9:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (or E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev4.

Subgoal 1.9:

Variables: SF SG PC L L2 Sl1 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (or E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : join L2 PC Sl1
Lev3 : level SF SG Sl1 E2 L3 *
Lev4 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.10:

Variables: SF SG PC L E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (not E1) L @
Lev1 : level SF SG PC E1 L *
============================
 is_slev L
 < case IsE.

Subgoal 1.10:

Variables: SF SG PC L E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (not E1) L @
Lev1 : level SF SG PC E1 L *
H1 : is_expr E1
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.10:

Variables: SF SG PC L E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (not E1) L @
Lev1 : level SF SG PC E1 L *
H1 : is_expr E1
H2 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.11:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (greater E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.11:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (greater E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.11:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (greater E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.11:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (greater E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 1.11:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (greater E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.12:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (eq E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.12:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (eq E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.12:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (eq E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.12:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (eq E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 1.12:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (eq E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.13:

Variables: SF SG PC S
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (stringLit S) public @
============================
 is_slev public
 < search.

Subgoal 1.14:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (appString E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
============================
 is_slev L
 < case IsE.

Subgoal 1.14:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (appString E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.14:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (appString E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.14:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (appString E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 1.14:

Variables: SF SG PC L L2 L3 E2 E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (appString E1 E2) L @
Lev1 : level SF SG PC E1 L2 *
Lev2 : level SF SG PC E2 L3 *
Lev3 : join L2 L3 L
H1 : is_expr E1
H2 : is_expr E2
H3 : is_slev L2
H4 : is_slev L3
H5 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.15:

Variables: SF SG PC L X
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (name X) L @
Lev1 : lookupScopes X SG L
============================
 is_slev L
 < apply lookupScopes_is_slev to _ Lev1.

Subgoal 1.15:

Variables: SF SG PC L X
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (name X) L @
Lev1 : lookupScopes X SG L
H1 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.16:

Variables: SF SG ArgLevs Args Fun
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG private (call Fun Args) private @
Lev1 : lookup SF Fun (private, ArgLevs)
Lev2 : levelArgs SF SG private Args ArgLevs *
============================
 is_slev private
 < apply lookupSecFun_is to _ Lev1.

Subgoal 1.16:

Variables: SF SG ArgLevs Args Fun
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG private (call Fun Args) private @
Lev1 : lookup SF Fun (private, ArgLevs)
Lev2 : levelArgs SF SG private Args ArgLevs *
H1 : is_slev private
H2 : is_list is_slev ArgLevs
============================
 is_slev private
 < search.

Subgoal 1.17:

Variables: SF SG L ArgLevs Args Fun
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG public (call Fun Args) L @
Lev1 : lookup SF Fun (L, ArgLevs)
Lev2 : levelArgs SF SG public Args ArgLevs *
============================
 is_slev L
 < apply lookupSecFun_is to _ Lev1.

Subgoal 1.17:

Variables: SF SG L ArgLevs Args Fun
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG public (call Fun Args) L @
Lev1 : lookup SF Fun (L, ArgLevs)
Lev2 : levelArgs SF SG public Args ArgLevs *
H1 : is_slev L
H2 : is_list is_slev ArgLevs
============================
 is_slev L
 < search.

Subgoal 1.18:

Variables: SF SG PC L SG2 E1 S
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (stmtExpr S E1) L @
Lev1 : secure SF ([]::SG) PC S SG2 *
Lev2 : level SF SG2 PC E1 L *
============================
 is_slev L
 < case IsE.

Subgoal 1.18:

Variables: SF SG PC L SG2 E1 S
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (stmtExpr S E1) L @
Lev1 : secure SF ([]::SG) PC S SG2 *
Lev2 : level SF SG2 PC E1 L *
H1 : is_stmt S
H2 : is_expr E1
============================
 is_slev L
 < apply IH_S to _ _ _ Lev1.

Subgoal 1.18:

Variables: SF SG PC L SG2 E1 S
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (stmtExpr S E1) L @
Lev1 : secure SF ([]::SG) PC S SG2 *
Lev2 : level SF SG2 PC E1 L *
H1 : is_stmt S
H2 : is_expr E1
H3 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 is_slev L
 < apply IH_E to _ _ _ Lev2.

Subgoal 1.18:

Variables: SF SG PC L SG2 E1 S
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (stmtExpr S E1) L @
Lev1 : secure SF ([]::SG) PC S SG2 *
Lev2 : level SF SG2 PC E1 L *
H1 : is_stmt S
H2 : is_expr E1
H3 : is_list (is_list (is_pair is_string is_slev)) SG2
H4 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.19:

Variables: SF SG PC L Fields
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (recBuild Fields)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (recBuild Fields) L @
Lev1 : levelRecFields SF SG PC Fields L *
============================
 is_slev L
 < case IsE.

Subgoal 1.19:

Variables: SF SG PC L Fields
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (recBuild Fields) L @
Lev1 : levelRecFields SF SG PC Fields L *
H1 : is_recFieldExprs Fields
============================
 is_slev L
 < apply IH_RF to _ _ _ Lev1.

Subgoal 1.19:

Variables: SF SG PC L Fields
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (recBuild Fields) L @
Lev1 : levelRecFields SF SG PC Fields L *
H1 : is_recFieldExprs Fields
H2 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.20:

Variables: SF SG PC L Field E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (recFieldAccess E1 Field)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (recFieldAccess E1 Field) L @
Lev1 : level SF SG PC E1 L *
============================
 is_slev L
 < case IsE.

Subgoal 1.20:

Variables: SF SG PC L Field E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (recFieldAccess E1 Field) L @
Lev1 : level SF SG PC E1 L *
H1 : is_expr E1
H2 : is_string Field
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.20:

Variables: SF SG PC L Field E1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (recFieldAccess E1 Field) L @
Lev1 : level SF SG PC E1 L *
H1 : is_expr E1
H2 : is_string Field
H3 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.21:

Variables: SF SG PC L Ty Msg
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr (errorExpr Msg Ty)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (errorExpr Msg Ty) L @
Lev1 : level SF SG PC Msg L *
============================
 is_slev L
 < case IsE.

Subgoal 1.21:

Variables: SF SG PC L Ty Msg
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (errorExpr Msg Ty) L @
Lev1 : level SF SG PC Msg L *
H1 : is_expr Msg
H2 : is_typ Ty
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 1.21:

Variables: SF SG PC L Ty Msg
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC (errorExpr Msg Ty) L @
Lev1 : level SF SG PC Msg L *
H1 : is_expr Msg
H2 : is_typ Ty
H3 : is_slev L
============================
 is_slev L
 < search.

Subgoal 1.22:

Variables: SF SG PC L Names E_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC <unknown I expr> L @
Lev1 : names SG Names
Lev2 : Names |{expr}- <unknown I expr> ~~> E_P
Lev3 : level SF SG PC E_P L *
============================
 is_slev L
 < apply names_is_sec to _ Lev1.

Subgoal 1.22:

Variables: SF SG PC L Names E_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC <unknown I expr> L @
Lev1 : names SG Names
Lev2 : Names |{expr}- <unknown I expr> ~~> E_P
Lev3 : level SF SG PC E_P L *
H1 : is_list is_string Names
============================
 is_slev L
 < apply proj_expr_is to Lev2 _ _.

Subgoal 1.22:

Variables: SF SG PC L Names E_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC <unknown I expr> L @
Lev1 : names SG Names
Lev2 : Names |{expr}- <unknown I expr> ~~> E_P
Lev3 : level SF SG PC E_P L *
H1 : is_list is_string Names
H2 : is_expr E_P
============================
 is_slev L
 < apply IH_E to _ _ _ Lev3.

Subgoal 1.22:

Variables: SF SG PC L Names E_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : level SF SG PC <unknown I expr> L @
Lev1 : names SG Names
Lev2 : Names |{expr}- <unknown I expr> ~~> E_P
Lev3 : level SF SG PC E_P L *
H1 : is_list is_string Names
H2 : is_expr E_P
H3 : is_slev L
============================
 is_slev L
 < search.

Subgoal 2.1:

Variables: SF PC SG'
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' PC noop SG' @
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.2:

Variables: SF SG PC SG' SG3 S2 S1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC (seq S1 S2) SG' @
Sec1 : secure SF SG PC S1 SG3 *
Sec2 : secure SF SG3 PC S2 SG' *
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < case IsS.

Subgoal 2.2:

Variables: SF SG PC SG' SG3 S2 S1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC (seq S1 S2) SG' @
Sec1 : secure SF SG PC S1 SG3 *
Sec2 : secure SF SG3 PC S2 SG' *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < apply IH_S to _ _ _ Sec1.

Subgoal 2.2:

Variables: SF SG PC SG' SG3 S2 S1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC (seq S1 S2) SG' @
Sec1 : secure SF SG PC S1 SG3 *
Sec2 : secure SF SG3 PC S2 SG' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_list (is_list (is_pair is_string is_slev)) SG3
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < apply IH_S to _ _ _ Sec2.

Subgoal 2.2:

Variables: SF SG PC SG' SG3 S2 S1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC (seq S1 S2) SG' @
Sec1 : secure SF SG PC S1 SG3 *
Sec2 : secure SF SG3 PC S2 SG' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_list (is_list (is_pair is_string is_slev)) SG3
H4 : is_list (is_list (is_pair is_string is_slev)) SG'
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.3:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
Sec : secure SF (Scope::SG1) public (declare Ty X E) (((X, public)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) public E public *
Sec2 : no_lookup Scope X
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, public)::Scope)::SG1)
 < case IsS.

Subgoal 2.3:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
Sec : secure SF (Scope::SG1) public (declare Ty X E) (((X, public)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) public E public *
Sec2 : no_lookup Scope X
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, public)::Scope)::SG1)
 < case IsSG.

Subgoal 2.3:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
Sec : secure SF (Scope::SG1) public (declare Ty X E) (((X, public)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) public E public *
Sec2 : no_lookup Scope X
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
H4 : is_list (is_pair is_string is_slev) Scope
H5 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, public)::Scope)::SG1)
 < search.

Subgoal 2.4:

Variables: SF PC SG' L E X
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' PC (assign X E) SG' @
Sec1 : level SF SG' PC E L *
Sec2 : lookupScopes X SG' private
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.5:

Variables: SF SG' E X
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' public (assign X E) SG' @
Sec1 : level SF SG' public E public *
Sec2 : lookupScopes X SG' public
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.6:

Variables: SF PC SG' L E Fields Rec
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' PC (recUpdate Rec Fields E) SG' @
Sec1 : level SF SG' PC E L *
Sec2 : lookupScopes Rec SG' private
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.7:

Variables: SF SG' E Fields Rec
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' public (recUpdate Rec Fields E) SG' @
Sec1 : level SF SG' public E public *
Sec2 : lookupScopes Rec SG' public
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.8:

Variables: SF PC SG' L Sl1 SGT SGF F T E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (ifThenElse E T F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' PC (ifThenElse E T F) SG' @
Sec1 : level SF SG' PC E L *
Sec2 : join L PC Sl1
Sec3 : secure SF ([]::SG') Sl1 T SGT *
Sec4 : secure SF ([]::SG') Sl1 F SGF *
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.9:

Variables: SF SG' L Scope SG2 S1 E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' private (while E S1) SG' @
Sec1 : level SF SG' private E L *
Sec2 : secure SF ([]::SG') private S1 (Scope::SG2) *
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.10:

Variables: SF SG' Scope SG2 S1 E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' public (while E S1) SG' @
Sec1 : level SF SG' public E public *
Sec2 : secure SF ([]::SG') public S1 (Scope::SG2) *
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.11:

Variables: SF PC SG' Scope S1
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' PC (scopeStmt S1) SG' @
Sec1 : secure SF ([]::SG') PC S1 (Scope::SG') *
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.12:

Variables: SF SG' E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
Sec : secure SF SG' public (printVal E) SG' @
Sec1 : level SF SG' public E public *
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 2.13:

Variables: SF PC L SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
Sec : secure SF (Scope::SG1) PC (secdecl private Ty X E) (((X, private)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) PC E L *
Sec2 : no_lookup Scope X
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, private)::Scope)::SG1)
 < case IsS.

Subgoal 2.13:

Variables: SF PC L SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
Sec : secure SF (Scope::SG1) PC (secdecl private Ty X E) (((X, private)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) PC E L *
Sec2 : no_lookup Scope X
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, private)::Scope)::SG1)
 < case IsSG.

Subgoal 2.13:

Variables: SF PC L SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
Sec : secure SF (Scope::SG1) PC (secdecl private Ty X E) (((X, private)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) PC E L *
Sec2 : no_lookup Scope X
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_list (is_pair is_string is_slev) Scope
H6 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, private)::Scope)::SG1)
 < search.

Subgoal 2.14:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
Sec : secure SF (Scope::SG1) public (secdecl public Ty X E) (((X, public)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) public E public *
Sec2 : no_lookup Scope X
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, public)::Scope)::SG1)
 < case IsS.

Subgoal 2.14:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
Sec : secure SF (Scope::SG1) public (secdecl public Ty X E) (((X, public)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) public E public *
Sec2 : no_lookup Scope X
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, public)::Scope)::SG1)
 < case IsSG.

Subgoal 2.14:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
Sec : secure SF (Scope::SG1) public (secdecl public Ty X E) (((X, public)::Scope)::SG1) @
Sec1 : level SF (Scope::SG1) public E public *
Sec2 : no_lookup Scope X
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
H5 : is_list (is_pair is_string is_slev) Scope
H6 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 is_list (is_list (is_pair is_string is_slev)) (((X, public)::Scope)::SG1)
 < search.

Subgoal 2.15:

Variables: SF SG PC SG' Names S_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC <unknown I stmt> SG' @
Sec1 : names SG Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF SG PC S_P SG' *
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < apply names_is_sec to _ Sec1.

Subgoal 2.15:

Variables: SF SG PC SG' Names S_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC <unknown I stmt> SG' @
Sec1 : names SG Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF SG PC S_P SG' *
H1 : is_list is_string Names
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < apply proj_stmt_is to Sec2 _ _.

Subgoal 2.15:

Variables: SF SG PC SG' Names S_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC <unknown I stmt> SG' @
Sec1 : names SG Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF SG PC S_P SG' *
H1 : is_list is_string Names
H2 : is_stmt S_P
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < apply IH_S to _ _ _ Sec3.

Subgoal 2.15:

Variables: SF SG PC SG' Names S_P
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Sec : secure SF SG PC <unknown I stmt> SG' @
Sec1 : names SG Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF SG PC S_P SG' *
H1 : is_list is_string Names
H2 : is_stmt S_P
H3 : is_list (is_list (is_pair is_string is_slev)) SG'
============================
 is_list (is_list (is_pair is_string is_slev)) SG'
 < search.

Subgoal 3:

Variables: SF SG PC A L
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelArgs SF SG PC A L @
============================
 is_list is_slev L
 < Lev: case Lev (keep).

Subgoal 3.1:

Variables: SF SG PC
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelArgs SF SG PC nilArgs [] @
============================
 is_list is_slev []
 < search.

Subgoal 3.2:

Variables: SF SG PC Rest L1 A1 E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsA : is_args (consArgs E A1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelArgs SF SG PC (consArgs E A1) (L1::Rest) @
Lev1 : level SF SG PC E L1 *
Lev2 : levelArgs SF SG PC A1 Rest *
============================
 is_list is_slev (L1::Rest)
 < case IsA.

Subgoal 3.2:

Variables: SF SG PC Rest L1 A1 E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelArgs SF SG PC (consArgs E A1) (L1::Rest) @
Lev1 : level SF SG PC E L1 *
Lev2 : levelArgs SF SG PC A1 Rest *
H1 : is_expr E
H2 : is_args A1
============================
 is_list is_slev (L1::Rest)
 < apply IH_E to _ _ _ Lev1.

Subgoal 3.2:

Variables: SF SG PC Rest L1 A1 E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelArgs SF SG PC (consArgs E A1) (L1::Rest) @
Lev1 : level SF SG PC E L1 *
Lev2 : levelArgs SF SG PC A1 Rest *
H1 : is_expr E
H2 : is_args A1
H3 : is_slev L1
============================
 is_list is_slev (L1::Rest)
 < apply IH_A to _ _ _ Lev2.

Subgoal 3.2:

Variables: SF SG PC Rest L1 A1 E
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelArgs SF SG PC (consArgs E A1) (L1::Rest) @
Lev1 : level SF SG PC E L1 *
Lev2 : levelArgs SF SG PC A1 Rest *
H1 : is_expr E
H2 : is_args A1
H3 : is_slev L1
H4 : is_list is_slev Rest
============================
 is_list is_slev (L1::Rest)
 < search.

Subgoal 4:

Variables: SF SG PC RF L
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelRecFields SF SG PC RF L @
============================
 is_slev L
 < Lev: case Lev (keep).

Subgoal 4.1:

Variables: SF SG PC
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelRecFields SF SG PC nilRecFieldExprs public @
============================
 is_slev public
 < search.

Subgoal 4.2:

Variables: SF SG PC L LE LRF RF1 E F
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsRF : is_recFieldExprs (consRecFieldExprs F E RF1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelRecFields SF SG PC (consRecFieldExprs F E RF1) L @
Lev1 : level SF SG PC E LE *
Lev2 : levelRecFields SF SG PC RF1 LRF *
Lev3 : join LE LRF L
============================
 is_slev L
 < case IsRF.

Subgoal 4.2:

Variables: SF SG PC L LE LRF RF1 E F
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelRecFields SF SG PC (consRecFieldExprs F E RF1) L @
Lev1 : level SF SG PC E LE *
Lev2 : levelRecFields SF SG PC RF1 LRF *
Lev3 : join LE LRF L
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
============================
 is_slev L
 < apply IH_E to _ _ _ Lev1.

Subgoal 4.2:

Variables: SF SG PC L LE LRF RF1 E F
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelRecFields SF SG PC (consRecFieldExprs F E RF1) L @
Lev1 : level SF SG PC E LE *
Lev2 : levelRecFields SF SG PC RF1 LRF *
Lev3 : join LE LRF L
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
H4 : is_slev LE
============================
 is_slev L
 < apply IH_RF to _ _ _ Lev2.

Subgoal 4.2:

Variables: SF SG PC L LE LRF RF1 E F
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelRecFields SF SG PC (consRecFieldExprs F E RF1) L @
Lev1 : level SF SG PC E LE *
Lev2 : levelRecFields SF SG PC RF1 LRF *
Lev3 : join LE LRF L
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
H4 : is_slev LE
H5 : is_slev LRF
============================
 is_slev L
 < apply join_is to _ _ Lev3.

Subgoal 4.2:

Variables: SF SG PC L LE LRF RF1 E F
IH_E : forall SF SG PC E L,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> level SF SG PC E L * ->
         is_slev L
IH_S : forall SF SG PC S SG',
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> secure SF SG PC S SG' * ->
         is_list (is_list (is_pair is_string is_slev)) SG'
IH_A : forall SF SG PC A L,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> levelArgs SF SG PC A L * ->
         is_list is_slev L
IH_RF : forall SF SG PC RF L,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> levelRecFields SF SG PC RF L * ->
          is_slev L
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
Lev : levelRecFields SF SG PC (consRecFieldExprs F E RF1) L @
Lev1 : level SF SG PC E LE *
Lev2 : levelRecFields SF SG PC RF1 LRF *
Lev3 : join LE LRF L
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
H4 : is_slev LE
H5 : is_slev LRF
H6 : is_slev L
============================
 is_slev L
 < search.

Proof completed.
 < Extensible_Theorem
      level_unique : forall SF SG PC E LA LB,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         LevA : level SF SG PC E LA ->
         LevB : level SF SG PC E LB ->
         LA = LB
      on LevA as IH_E,
      secure_unique : forall SF SG PC S SGA SGB,
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         SecA : secure SF SG PC S SGA ->
         SecB : secure SF SG PC S SGB ->
         SGA = SGB
      on SecA as IH_Salso
   
      levelArgs_unique : forall SF SG PC A LA LB,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         LevA : levelArgs SF SG PC A LA ->
         LevB : levelArgs SF SG PC A LB ->
         LA = LB
      on LevA as IH_A,
      levelRecFields_unique : forall SF SG PC RF LA LB,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         LevA : levelRecFields SF SG PC RF LA ->
         LevB : levelRecFields SF SG PC RF LB ->
         LA = LB
      on LevA as IH_RF.

Subgoal 1.1:

Variables: SF SG PC LB I
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (num I) public @
LevB : level SF SG PC (num I) LB
============================
 public = LB
 < case LevB.

Subgoal 1.1:

Variables: SF SG PC I
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (num I) public @
============================
 public = public
 < search.

Subgoal 1.2:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LA @
LevB : level SF SG PC (plus E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.2:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LA @
LevB : level SF SG PC (plus E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.2:

Variables: SF SG PC LA LB L1 L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.2:

Variables: SF SG PC LA LB L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.2:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.2:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA2.

Subgoal 1.2:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 1.2:

Variables: SF SG PC LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (plus E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.3:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LA @
LevB : level SF SG PC (minus E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.3:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LA @
LevB : level SF SG PC (minus E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.3:

Variables: SF SG PC LA LB L1 L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.3:

Variables: SF SG PC LA LB L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.3:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.3:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA2.

Subgoal 1.3:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 1.3:

Variables: SF SG PC LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (minus E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.4:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LA @
LevB : level SF SG PC (mult E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.4:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LA @
LevB : level SF SG PC (mult E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.4:

Variables: SF SG PC LA LB L1 L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.4:

Variables: SF SG PC LA LB L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.4:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.4:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA2.

Subgoal 1.4:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 1.4:

Variables: SF SG PC LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (mult E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.5:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LA @
LevB : level SF SG PC (div E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.5:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LA @
LevB : level SF SG PC (div E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.5:

Variables: SF SG PC LA LB L1 L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.5:

Variables: SF SG PC LA LB L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.5:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.5:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA2.

Subgoal 1.5:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 1.5:

Variables: SF SG PC LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (div E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.6:

Variables: SF SG PC LB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC true public @
LevB : level SF SG PC true LB
============================
 public = LB
 < case LevB.

Subgoal 1.6:

Variables: SF SG PC
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC true public @
============================
 public = public
 < search.

Subgoal 1.7:

Variables: SF SG PC LB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC false public @
LevB : level SF SG PC false LB
============================
 public = LB
 < case LevB.

Subgoal 1.7:

Variables: SF SG PC
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC false public @
============================
 public = public
 < search.

Subgoal 1.8:

Variables: SF SG PC LA LB L1 Sl1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevB : level SF SG PC (and E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : join L1 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.8:

Variables: SF SG PC LA LB L1 Sl1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevB : level SF SG PC (and E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : join L1 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.8:

Variables: SF SG PC LA LB L1 Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : join L1 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.8:

Variables: SF SG PC LA LB Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.8:

Variables: SF SG PC LA LB Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevB.

Subgoal 1.8:

Variables: SF SG PC LA LB Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
============================
 LA = LB
 < apply join_unique to _ _ LevA2 LevB1.

Subgoal 1.8:

Variables: SF SG PC LA LB L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
============================
 LA = LB
 < apply join_is to _ _ LevA2.

Subgoal 1.8:

Variables: SF SG PC LA LB L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA3 LevB2.

Subgoal 1.8:

Variables: SF SG PC LA LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.8:

Variables: SF SG PC LA LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
H6 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA3.

Subgoal 1.8:

Variables: SF SG PC LA LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
H6 : is_slev L3
H7 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA4 LevB3.

Subgoal 1.8:

Variables: SF SG PC LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (and E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
H6 : is_slev L3
H7 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.9:

Variables: SF SG PC LA LB L1 Sl1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevB : level SF SG PC (or E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : join L1 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.9:

Variables: SF SG PC LA LB L1 Sl1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevB : level SF SG PC (or E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : join L1 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.9:

Variables: SF SG PC LA LB L1 Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : join L1 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.9:

Variables: SF SG PC LA LB Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.9:

Variables: SF SG PC LA LB Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevB.

Subgoal 1.9:

Variables: SF SG PC LA LB Sl1 L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl1
LevA3 : level SF SG Sl1 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
============================
 LA = LB
 < apply join_unique to _ _ LevA2 LevB1.

Subgoal 1.9:

Variables: SF SG PC LA LB L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
============================
 LA = LB
 < apply join_is to _ _ LevA2.

Subgoal 1.9:

Variables: SF SG PC LA LB L2 E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L2 *
LevA4 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA3 LevB2.

Subgoal 1.9:

Variables: SF SG PC LA LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.9:

Variables: SF SG PC LA LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
H6 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA3.

Subgoal 1.9:

Variables: SF SG PC LA LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
H6 : is_slev L3
H7 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA4 LevB3.

Subgoal 1.9:

Variables: SF SG PC LB E2 E1 L3 Sl2 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (or E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : join L3 PC Sl2
LevA3 : level SF SG Sl2 E2 L4 *
LevA4 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : join L3 PC Sl2
LevB2 : level SF SG Sl2 E2 L4
LevB3 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L3
H5 : is_slev Sl2
H6 : is_slev L3
H7 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.10:

Variables: SF SG PC LA LB E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (not E1) LA @
LevB : level SF SG PC (not E1) LB
LevA1 : level SF SG PC E1 LA *
============================
 LA = LB
 < case IsE.

Subgoal 1.10:

Variables: SF SG PC LA LB E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (not E1) LA @
LevB : level SF SG PC (not E1) LB
LevA1 : level SF SG PC E1 LA *
H1 : is_expr E1
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.10:

Variables: SF SG PC LA LB E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (not E1) LA @
LevA1 : level SF SG PC E1 LA *
H1 : is_expr E1
LevB : level SF SG PC E1 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.10:

Variables: SF SG PC LB E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (not E1) LB @
LevA1 : level SF SG PC E1 LB *
H1 : is_expr E1
LevB : level SF SG PC E1 LB
============================
 LB = LB
 < search.

Subgoal 1.11:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LA @
LevB : level SF SG PC (greater E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.11:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LA @
LevB : level SF SG PC (greater E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.11:

Variables: SF SG PC LA LB L1 L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.11:

Variables: SF SG PC LA LB L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.11:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.11:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA2.

Subgoal 1.11:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 1.11:

Variables: SF SG PC LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (greater E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.12:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LA @
LevB : level SF SG PC (eq E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.12:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LA @
LevB : level SF SG PC (eq E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.12:

Variables: SF SG PC LA LB L1 L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.12:

Variables: SF SG PC LA LB L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.12:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.12:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA2.

Subgoal 1.12:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 1.12:

Variables: SF SG PC LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (eq E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.13:

Variables: SF SG PC LB S
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stringLit S) public @
LevB : level SF SG PC (stringLit S) LB
============================
 public = LB
 < case LevB.

Subgoal 1.13:

Variables: SF SG PC S
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stringLit S) public @
============================
 public = public
 < search.

Subgoal 1.14:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LA @
LevB : level SF SG PC (appString E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
============================
 LA = LB
 < case IsE.

Subgoal 1.14:

Variables: SF SG PC LA LB L1 L2 E2 E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LA @
LevB : level SF SG PC (appString E1 E2) LB
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.14:

Variables: SF SG PC LA LB L1 L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LA @
LevA1 : level SF SG PC E1 L1 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L1 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.14:

Variables: SF SG PC LA LB L2 E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L2 *
LevA3 : join L3 L2 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.14:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 1.14:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
============================
 LA = LB
 < apply level_is to _ _ _ LevA2.

Subgoal 1.14:

Variables: SF SG PC LA LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LA @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LA
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 1.14:

Variables: SF SG PC LB E2 E1 L3 L4
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (appString E1 E2) LB @
LevA1 : level SF SG PC E1 L3 *
LevA2 : level SF SG PC E2 L4 *
LevA3 : join L3 L4 LB
H1 : is_expr E1
H2 : is_expr E2
LevB : level SF SG PC E1 L3
LevB1 : level SF SG PC E2 L4
LevB2 : join L3 L4 LB
H3 : is_slev L3
H4 : is_slev L4
============================
 LB = LB
 < search.

Subgoal 1.15:

Variables: SF SG PC LA LB X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (name X) LA @
LevB : level SF SG PC (name X) LB
LevA1 : lookupScopes X SG LA
============================
 LA = LB
 < case IsE.

Subgoal 1.15:

Variables: SF SG PC LA LB X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (name X) LA @
LevB : level SF SG PC (name X) LB
LevA1 : lookupScopes X SG LA
H1 : is_string X
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.15:

Variables: SF SG PC LA LB X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (name X) LA @
LevA1 : lookupScopes X SG LA
H1 : is_string X
LevB : lookupScopes X SG LB
============================
 LA = LB
 < apply lookupScopes_unique to LevA1 LevB.

Subgoal 1.15:

Variables: SF SG PC LB X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (name X) LB @
LevA1 : lookupScopes X SG LB
H1 : is_string X
LevB : lookupScopes X SG LB
============================
 LB = LB
 < search.

Subgoal 1.16:

Variables: SF SG LB ArgLevs Args Fun
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
LevA : level SF SG private (call Fun Args) private @
LevB : level SF SG private (call Fun Args) LB
LevA1 : lookup SF Fun (private, ArgLevs)
LevA2 : levelArgs SF SG private Args ArgLevs *
============================
 private = LB
 < case IsE.

Subgoal 1.16:

Variables: SF SG LB ArgLevs Args Fun
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
LevA : level SF SG private (call Fun Args) private @
LevB : level SF SG private (call Fun Args) LB
LevA1 : lookup SF Fun (private, ArgLevs)
LevA2 : levelArgs SF SG private Args ArgLevs *
H1 : is_string Fun
H2 : is_args Args
============================
 private = LB
 < LevB: case LevB.

Subgoal 1.16:

Variables: SF SG ArgLevs Args Fun ArgLevs1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
LevA : level SF SG private (call Fun Args) private @
LevA1 : lookup SF Fun (private, ArgLevs)
LevA2 : levelArgs SF SG private Args ArgLevs *
H1 : is_string Fun
H2 : is_args Args
LevB : lookup SF Fun (private, ArgLevs1)
LevB1 : levelArgs SF SG private Args ArgLevs1
============================
 private = private
 < apply lookup_unique to LevA1 LevB.

Subgoal 1.16:

Variables: SF SG Args Fun ArgLevs1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
LevA : level SF SG private (call Fun Args) private @
LevA1 : lookup SF Fun (private, ArgLevs1)
LevA2 : levelArgs SF SG private Args ArgLevs1 *
H1 : is_string Fun
H2 : is_args Args
LevB : lookup SF Fun (private, ArgLevs1)
LevB1 : levelArgs SF SG private Args ArgLevs1
============================
 private = private
 < search.

Subgoal 1.17:

Variables: SF SG LA LB ArgLevs Args Fun
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
LevA : level SF SG public (call Fun Args) LA @
LevB : level SF SG public (call Fun Args) LB
LevA1 : lookup SF Fun (LA, ArgLevs)
LevA2 : levelArgs SF SG public Args ArgLevs *
============================
 LA = LB
 < case IsE.

Subgoal 1.17:

Variables: SF SG LA LB ArgLevs Args Fun
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
LevA : level SF SG public (call Fun Args) LA @
LevB : level SF SG public (call Fun Args) LB
LevA1 : lookup SF Fun (LA, ArgLevs)
LevA2 : levelArgs SF SG public Args ArgLevs *
H1 : is_string Fun
H2 : is_args Args
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.17:

Variables: SF SG LA LB ArgLevs Args Fun ArgLevs1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
LevA : level SF SG public (call Fun Args) LA @
LevA1 : lookup SF Fun (LA, ArgLevs)
LevA2 : levelArgs SF SG public Args ArgLevs *
H1 : is_string Fun
H2 : is_args Args
LevB : lookup SF Fun (LB, ArgLevs1)
LevB1 : levelArgs SF SG public Args ArgLevs1
============================
 LA = LB
 < apply lookup_unique to LevA1 LevB.

Subgoal 1.17:

Variables: SF SG LB Args Fun ArgLevs1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
LevA : level SF SG public (call Fun Args) LB @
LevA1 : lookup SF Fun (LB, ArgLevs1)
LevA2 : levelArgs SF SG public Args ArgLevs1 *
H1 : is_string Fun
H2 : is_args Args
LevB : lookup SF Fun (LB, ArgLevs1)
LevB1 : levelArgs SF SG public Args ArgLevs1
============================
 LB = LB
 < search.

Subgoal 1.18:

Variables: SF SG PC LA LB SG2 E1 S
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stmtExpr S E1) LA @
LevB : level SF SG PC (stmtExpr S E1) LB
LevA1 : secure SF ([]::SG) PC S SG2 *
LevA2 : level SF SG2 PC E1 LA *
============================
 LA = LB
 < case IsE.

Subgoal 1.18:

Variables: SF SG PC LA LB SG2 E1 S
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stmtExpr S E1) LA @
LevB : level SF SG PC (stmtExpr S E1) LB
LevA1 : secure SF ([]::SG) PC S SG2 *
LevA2 : level SF SG2 PC E1 LA *
H1 : is_stmt S
H2 : is_expr E1
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.18:

Variables: SF SG PC LA LB SG2 E1 S SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stmtExpr S E1) LA @
LevA1 : secure SF ([]::SG) PC S SG2 *
LevA2 : level SF SG2 PC E1 LA *
H1 : is_stmt S
H2 : is_expr E1
LevB : secure SF ([]::SG) PC S SG1
LevB1 : level SF SG1 PC E1 LB
============================
 LA = LB
 < apply IH_S to _ _ _ _ LevA1 LevB.

Subgoal 1.18:

Variables: SF SG PC LA LB E1 S SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stmtExpr S E1) LA @
LevA1 : secure SF ([]::SG) PC S SG1 *
LevA2 : level SF SG1 PC E1 LA *
H1 : is_stmt S
H2 : is_expr E1
LevB : secure SF ([]::SG) PC S SG1
LevB1 : level SF SG1 PC E1 LB
============================
 LA = LB
 < apply secure_is to _ _ _ LevA1.

Subgoal 1.18:

Variables: SF SG PC LA LB E1 S SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stmtExpr S E1) LA @
LevA1 : secure SF ([]::SG) PC S SG1 *
LevA2 : level SF SG1 PC E1 LA *
H1 : is_stmt S
H2 : is_expr E1
LevB : secure SF ([]::SG) PC S SG1
LevB1 : level SF SG1 PC E1 LB
H3 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA2 LevB1.

Subgoal 1.18:

Variables: SF SG PC LB E1 S SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (stmtExpr S E1) LB @
LevA1 : secure SF ([]::SG) PC S SG1 *
LevA2 : level SF SG1 PC E1 LB *
H1 : is_stmt S
H2 : is_expr E1
LevB : secure SF ([]::SG) PC S SG1
LevB1 : level SF SG1 PC E1 LB
H3 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 LB = LB
 < search.

Subgoal 1.19:

Variables: SF SG PC LA LB Fields
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (recBuild Fields)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recBuild Fields) LA @
LevB : level SF SG PC (recBuild Fields) LB
LevA1 : levelRecFields SF SG PC Fields LA *
============================
 LA = LB
 < case IsE.

Subgoal 1.19:

Variables: SF SG PC LA LB Fields
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recBuild Fields) LA @
LevB : level SF SG PC (recBuild Fields) LB
LevA1 : levelRecFields SF SG PC Fields LA *
H1 : is_recFieldExprs Fields
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.19:

Variables: SF SG PC LA LB Fields
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recBuild Fields) LA @
LevA1 : levelRecFields SF SG PC Fields LA *
H1 : is_recFieldExprs Fields
LevB : levelRecFields SF SG PC Fields LB
============================
 LA = LB
 < apply IH_RF to _ _ _ _ LevA1 LevB.

Subgoal 1.19:

Variables: SF SG PC LB Fields
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recBuild Fields) LB @
LevA1 : levelRecFields SF SG PC Fields LB *
H1 : is_recFieldExprs Fields
LevB : levelRecFields SF SG PC Fields LB
============================
 LB = LB
 < search.

Subgoal 1.20:

Variables: SF SG PC LA LB Field E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (recFieldAccess E1 Field)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recFieldAccess E1 Field) LA @
LevB : level SF SG PC (recFieldAccess E1 Field) LB
LevA1 : level SF SG PC E1 LA *
============================
 LA = LB
 < case IsE.

Subgoal 1.20:

Variables: SF SG PC LA LB Field E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recFieldAccess E1 Field) LA @
LevB : level SF SG PC (recFieldAccess E1 Field) LB
LevA1 : level SF SG PC E1 LA *
H1 : is_expr E1
H2 : is_string Field
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.20:

Variables: SF SG PC LA LB Field E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recFieldAccess E1 Field) LA @
LevA1 : level SF SG PC E1 LA *
H1 : is_expr E1
H2 : is_string Field
LevB : level SF SG PC E1 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.20:

Variables: SF SG PC LB Field E1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (recFieldAccess E1 Field) LB @
LevA1 : level SF SG PC E1 LB *
H1 : is_expr E1
H2 : is_string Field
LevB : level SF SG PC E1 LB
============================
 LB = LB
 < search.

Subgoal 1.21:

Variables: SF SG PC LA LB Ty Msg
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr (errorExpr Msg Ty)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (errorExpr Msg Ty) LA @
LevB : level SF SG PC (errorExpr Msg Ty) LB
LevA1 : level SF SG PC Msg LA *
============================
 LA = LB
 < case IsE.

Subgoal 1.21:

Variables: SF SG PC LA LB Ty Msg
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (errorExpr Msg Ty) LA @
LevB : level SF SG PC (errorExpr Msg Ty) LB
LevA1 : level SF SG PC Msg LA *
H1 : is_expr Msg
H2 : is_typ Ty
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.21:

Variables: SF SG PC LA LB Ty Msg
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (errorExpr Msg Ty) LA @
LevA1 : level SF SG PC Msg LA *
H1 : is_expr Msg
H2 : is_typ Ty
LevB : level SF SG PC Msg LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 1.21:

Variables: SF SG PC LB Ty Msg
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC (errorExpr Msg Ty) LB @
LevA1 : level SF SG PC Msg LB *
H1 : is_expr Msg
H2 : is_typ Ty
LevB : level SF SG PC Msg LB
============================
 LB = LB
 < search.

Subgoal 1.22:

Variables: SF SG PC LA LB Names E_P
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC <unknown I expr> LA @
LevB : level SF SG PC <unknown I expr> LB
LevA1 : names SG Names
LevA2 : Names |{expr}- <unknown I expr> ~~> E_P
LevA3 : level SF SG PC E_P LA *
============================
 LA = LB
 < apply names_is_sec to _ LevA1.

Subgoal 1.22:

Variables: SF SG PC LA LB Names E_P
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC <unknown I expr> LA @
LevB : level SF SG PC <unknown I expr> LB
LevA1 : names SG Names
LevA2 : Names |{expr}- <unknown I expr> ~~> E_P
LevA3 : level SF SG PC E_P LA *
H1 : is_list is_string Names
============================
 LA = LB
 < apply proj_expr_is to LevA2 _ _.

Subgoal 1.22:

Variables: SF SG PC LA LB Names E_P
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC <unknown I expr> LA @
LevB : level SF SG PC <unknown I expr> LB
LevA1 : names SG Names
LevA2 : Names |{expr}- <unknown I expr> ~~> E_P
LevA3 : level SF SG PC E_P LA *
H1 : is_list is_string Names
H2 : is_expr E_P
============================
 LA = LB
 < LevB: case LevB.

Subgoal 1.22:

Variables: SF SG PC LA LB Names E_P Names1 E_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC <unknown I expr> LA @
LevA1 : names SG Names
LevA2 : Names |{expr}- <unknown I expr> ~~> E_P
LevA3 : level SF SG PC E_P LA *
H1 : is_list is_string Names
H2 : is_expr E_P
LevB : names SG Names1
LevB1 : Names1 |{expr}- <unknown I expr> ~~> E_P1
LevB2 : level SF SG PC E_P1 LB
============================
 LA = LB
 < apply names_unique to LevA1 LevB.

Subgoal 1.22:

Variables: SF SG PC LA LB E_P Names1 E_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC <unknown I expr> LA @
LevA1 : names SG Names1
LevA2 : Names1 |{expr}- <unknown I expr> ~~> E_P
LevA3 : level SF SG PC E_P LA *
H1 : is_list is_string Names1
H2 : is_expr E_P
LevB : names SG Names1
LevB1 : Names1 |{expr}- <unknown I expr> ~~> E_P1
LevB2 : level SF SG PC E_P1 LB
============================
 LA = LB
 < apply proj_expr_unique to LevA2 LevB1 _ _ _ _ _.

Subgoal 1.22:

Variables: SF SG PC LA LB Names1 E_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC <unknown I expr> LA @
LevA1 : names SG Names1
LevA2 : Names1 |{expr}- <unknown I expr> ~~> E_P1
LevA3 : level SF SG PC E_P1 LA *
H1 : is_list is_string Names1
H2 : is_expr E_P1
LevB : names SG Names1
LevB1 : Names1 |{expr}- <unknown I expr> ~~> E_P1
LevB2 : level SF SG PC E_P1 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA3 LevB2.

Subgoal 1.22:

Variables: SF SG PC LB Names1 E_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsE : is_expr <unknown I expr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : level SF SG PC <unknown I expr> LB @
LevA1 : names SG Names1
LevA2 : Names1 |{expr}- <unknown I expr> ~~> E_P1
LevA3 : level SF SG PC E_P1 LB *
H1 : is_list is_string Names1
H2 : is_expr E_P1
LevB : names SG Names1
LevB1 : Names1 |{expr}- <unknown I expr> ~~> E_P1
LevB2 : level SF SG PC E_P1 LB
============================
 LB = LB
 < search.

Subgoal 2.1:

Variables: SF PC SGA SGB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev PC
SecA : secure SF SGA PC noop SGA @
SecB : secure SF SGA PC noop SGB
============================
 SGA = SGB
 < case SecB.

Subgoal 2.1:

Variables: SF PC SGB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev PC
SecA : secure SF SGB PC noop SGB @
============================
 SGB = SGB
 < search.

Subgoal 2.2:

Variables: SF SG PC SGA SGB SG3 S2 S1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC (seq S1 S2) SGA @
SecB : secure SF SG PC (seq S1 S2) SGB
SecA1 : secure SF SG PC S1 SG3 *
SecA2 : secure SF SG3 PC S2 SGA *
============================
 SGA = SGB
 < case IsS.

Subgoal 2.2:

Variables: SF SG PC SGA SGB SG3 S2 S1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC (seq S1 S2) SGA @
SecB : secure SF SG PC (seq S1 S2) SGB
SecA1 : secure SF SG PC S1 SG3 *
SecA2 : secure SF SG3 PC S2 SGA *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 SGA = SGB
 < SecB: case SecB.

Subgoal 2.2:

Variables: SF SG PC SGA SGB SG3 S2 S1 SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC (seq S1 S2) SGA @
SecA1 : secure SF SG PC S1 SG3 *
SecA2 : secure SF SG3 PC S2 SGA *
H1 : is_stmt S1
H2 : is_stmt S2
SecB : secure SF SG PC S1 SG1
SecB1 : secure SF SG1 PC S2 SGB
============================
 SGA = SGB
 < apply IH_S to _ _ _ _ SecA1 SecB.

Subgoal 2.2:

Variables: SF SG PC SGA SGB S2 S1 SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC (seq S1 S2) SGA @
SecA1 : secure SF SG PC S1 SG1 *
SecA2 : secure SF SG1 PC S2 SGA *
H1 : is_stmt S1
H2 : is_stmt S2
SecB : secure SF SG PC S1 SG1
SecB1 : secure SF SG1 PC S2 SGB
============================
 SGA = SGB
 < apply secure_is to _ _ _ SecA1.

Subgoal 2.2:

Variables: SF SG PC SGA SGB S2 S1 SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC (seq S1 S2) SGA @
SecA1 : secure SF SG PC S1 SG1 *
SecA2 : secure SF SG1 PC S2 SGA *
H1 : is_stmt S1
H2 : is_stmt S2
SecB : secure SF SG PC S1 SG1
SecB1 : secure SF SG1 PC S2 SGB
H3 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 SGA = SGB
 < apply secure_is to _ _ _ SecB.

Subgoal 2.2:

Variables: SF SG PC SGA SGB S2 S1 SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC (seq S1 S2) SGA @
SecA1 : secure SF SG PC S1 SG1 *
SecA2 : secure SF SG1 PC S2 SGA *
H1 : is_stmt S1
H2 : is_stmt S2
SecB : secure SF SG PC S1 SG1
SecB1 : secure SF SG1 PC S2 SGB
H3 : is_list (is_list (is_pair is_string is_slev)) SG1
H4 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 SGA = SGB
 < apply IH_S to _ _ _ _ SecA2 SecB1.

Subgoal 2.2:

Variables: SF SG PC SGB S2 S1 SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC (seq S1 S2) SGB @
SecA1 : secure SF SG PC S1 SG1 *
SecA2 : secure SF SG1 PC S2 SGB *
H1 : is_stmt S1
H2 : is_stmt S2
SecB : secure SF SG PC S1 SG1
SecB1 : secure SF SG1 PC S2 SGB
H3 : is_list (is_list (is_pair is_string is_slev)) SG1
H4 : is_list (is_list (is_pair is_string is_slev)) SG1
============================
 SGB = SGB
 < search.

Subgoal 2.3:

Variables: SF SGB SG1 Scope X E Ty
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
IsPC : is_slev public
SecA : secure SF (Scope::SG1) public (declare Ty X E) (((X, public)::Scope)::SG1) @
SecB : secure SF (Scope::SG1) public (declare Ty X E) SGB
SecA1 : level SF (Scope::SG1) public E public *
SecA2 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG1 = SGB
 < case IsS.

Subgoal 2.3:

Variables: SF SGB SG1 Scope X E Ty
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
IsPC : is_slev public
SecA : secure SF (Scope::SG1) public (declare Ty X E) (((X, public)::Scope)::SG1) @
SecB : secure SF (Scope::SG1) public (declare Ty X E) SGB
SecA1 : level SF (Scope::SG1) public E public *
SecA2 : no_lookup Scope X
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 ((X, public)::Scope)::SG1 = SGB
 < SecB: case SecB.

Subgoal 2.3:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
IsPC : is_slev public
SecA : secure SF (Scope::SG1) public (declare Ty X E) (((X, public)::Scope)::SG1) @
SecA1 : level SF (Scope::SG1) public E public *
SecA2 : no_lookup Scope X
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
SecB : level SF (Scope::SG1) public E public
SecB1 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG1 = ((X, public)::Scope)::SG1
 < search.

Subgoal 2.4:

Variables: SF PC SGA SGB L E X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev PC
SecA : secure SF SGA PC (assign X E) SGA @
SecB : secure SF SGA PC (assign X E) SGB
SecA1 : level SF SGA PC E L *
SecA2 : lookupScopes X SGA private
============================
 SGA = SGB
 < case IsS.

Subgoal 2.4:

Variables: SF PC SGA SGB L E X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev PC
SecA : secure SF SGA PC (assign X E) SGA @
SecB : secure SF SGA PC (assign X E) SGB
SecA1 : level SF SGA PC E L *
SecA2 : lookupScopes X SGA private
H1 : is_string X
H2 : is_expr E
============================
 SGA = SGB
 < SecB: case SecB.

Subgoal 2.4.1:

Variables: SF PC SGB L E X L1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev PC
SecA : secure SF SGB PC (assign X E) SGB @
SecA1 : level SF SGB PC E L *
SecA2 : lookupScopes X SGB private
H1 : is_string X
H2 : is_expr E
SecB : level SF SGB PC E L1
SecB1 : lookupScopes X SGB private
============================
 SGB = SGB
 < search.

Subgoal 2.4.2:

Variables: SF SGB L E X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (assign X E) SGB @
SecA1 : level SF SGB public E L *
SecA2 : lookupScopes X SGB private
H1 : is_string X
H2 : is_expr E
SecB : level SF SGB public E public
SecB1 : lookupScopes X SGB public
============================
 SGB = SGB
 < search.

Subgoal 2.5:

Variables: SF SGA SGB E X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev public
SecA : secure SF SGA public (assign X E) SGA @
SecB : secure SF SGA public (assign X E) SGB
SecA1 : level SF SGA public E public *
SecA2 : lookupScopes X SGA public
============================
 SGA = SGB
 < case SecB.

Subgoal 2.5.1:

Variables: SF SGB E X L
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (assign X E) SGB @
SecA1 : level SF SGB public E public *
SecA2 : lookupScopes X SGB public
H1 : level SF SGB public E L
H2 : lookupScopes X SGB private
============================
 SGB = SGB
 < search.

Subgoal 2.5.2:

Variables: SF SGB E X
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (assign X E) SGB @
SecA1 : level SF SGB public E public *
SecA2 : lookupScopes X SGB public
H1 : level SF SGB public E public
H2 : lookupScopes X SGB public
============================
 SGB = SGB
 < search.

Subgoal 2.6:

Variables: SF PC SGA SGB L E Fields Rec
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev PC
SecA : secure SF SGA PC (recUpdate Rec Fields E) SGA @
SecB : secure SF SGA PC (recUpdate Rec Fields E) SGB
SecA1 : level SF SGA PC E L *
SecA2 : lookupScopes Rec SGA private
============================
 SGA = SGB
 < case SecB.

Subgoal 2.6.1:

Variables: SF PC SGB L E Fields Rec L1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev PC
SecA : secure SF SGB PC (recUpdate Rec Fields E) SGB @
SecA1 : level SF SGB PC E L *
SecA2 : lookupScopes Rec SGB private
H1 : level SF SGB PC E L1
H2 : lookupScopes Rec SGB private
============================
 SGB = SGB
 < search.

Subgoal 2.6.2:

Variables: SF SGB L E Fields Rec
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (recUpdate Rec Fields E) SGB @
SecA1 : level SF SGB public E L *
SecA2 : lookupScopes Rec SGB private
H1 : level SF SGB public E public
H2 : lookupScopes Rec SGB public
============================
 SGB = SGB
 < search.

Subgoal 2.7:

Variables: SF SGA SGB E Fields Rec
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev public
SecA : secure SF SGA public (recUpdate Rec Fields E) SGA @
SecB : secure SF SGA public (recUpdate Rec Fields E) SGB
SecA1 : level SF SGA public E public *
SecA2 : lookupScopes Rec SGA public
============================
 SGA = SGB
 < case SecB.

Subgoal 2.7.1:

Variables: SF SGB E Fields Rec L
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (recUpdate Rec Fields E) SGB @
SecA1 : level SF SGB public E public *
SecA2 : lookupScopes Rec SGB public
H1 : level SF SGB public E L
H2 : lookupScopes Rec SGB private
============================
 SGB = SGB
 < search.

Subgoal 2.7.2:

Variables: SF SGB E Fields Rec
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (recUpdate Rec Fields E) SGB @
SecA1 : level SF SGB public E public *
SecA2 : lookupScopes Rec SGB public
H1 : level SF SGB public E public
H2 : lookupScopes Rec SGB public
============================
 SGB = SGB
 < search.

Subgoal 2.8:

Variables: SF PC SGA SGB L Sl1 SGT SGF F T E
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (ifThenElse E T F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev PC
SecA : secure SF SGA PC (ifThenElse E T F) SGA @
SecB : secure SF SGA PC (ifThenElse E T F) SGB
SecA1 : level SF SGA PC E L *
SecA2 : join L PC Sl1
SecA3 : secure SF ([]::SGA) Sl1 T SGT *
SecA4 : secure SF ([]::SGA) Sl1 F SGF *
============================
 SGA = SGB
 < case SecB.

Subgoal 2.8:

Variables: SF PC SGB L Sl1 SGT SGF F T E L1 Sl2 SGT1 SGF1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (ifThenElse E T F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev PC
SecA : secure SF SGB PC (ifThenElse E T F) SGB @
SecA1 : level SF SGB PC E L *
SecA2 : join L PC Sl1
SecA3 : secure SF ([]::SGB) Sl1 T SGT *
SecA4 : secure SF ([]::SGB) Sl1 F SGF *
H1 : level SF SGB PC E L1
H2 : join L1 PC Sl2
H3 : secure SF ([]::SGB) Sl2 T SGT1
H4 : secure SF ([]::SGB) Sl2 F SGF1
============================
 SGB = SGB
 < search.

Subgoal 2.9:

Variables: SF SGA SGB L Scope SG2 S1 E
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev private
SecA : secure SF SGA private (while E S1) SGA @
SecB : secure SF SGA private (while E S1) SGB
SecA1 : level SF SGA private E L *
SecA2 : secure SF ([]::SGA) private S1 (Scope::SG2) *
============================
 SGA = SGB
 < case SecB.

Subgoal 2.9:

Variables: SF SGB L Scope SG2 S1 E L1 Scope1 SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev private
SecA : secure SF SGB private (while E S1) SGB @
SecA1 : level SF SGB private E L *
SecA2 : secure SF ([]::SGB) private S1 (Scope::SG2) *
H1 : level SF SGB private E L1
H2 : secure SF ([]::SGB) private S1 (Scope1::SG1)
============================
 SGB = SGB
 < search.

Subgoal 2.10:

Variables: SF SGA SGB Scope SG2 S1 E
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev public
SecA : secure SF SGA public (while E S1) SGA @
SecB : secure SF SGA public (while E S1) SGB
SecA1 : level SF SGA public E public *
SecA2 : secure SF ([]::SGA) public S1 (Scope::SG2) *
============================
 SGA = SGB
 < case SecB.

Subgoal 2.10:

Variables: SF SGB Scope SG2 S1 E Scope1 SG1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (while E S1) SGB @
SecA1 : level SF SGB public E public *
SecA2 : secure SF ([]::SGB) public S1 (Scope::SG2) *
H1 : level SF SGB public E public
H2 : secure SF ([]::SGB) public S1 (Scope1::SG1)
============================
 SGB = SGB
 < search.

Subgoal 2.11:

Variables: SF PC SGA SGB Scope S1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev PC
SecA : secure SF SGA PC (scopeStmt S1) SGA @
SecB : secure SF SGA PC (scopeStmt S1) SGB
SecA1 : secure SF ([]::SGA) PC S1 (Scope::SGA) *
============================
 SGA = SGB
 < case SecB.

Subgoal 2.11:

Variables: SF PC SGB Scope S1 Scope1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev PC
SecA : secure SF SGB PC (scopeStmt S1) SGB @
SecA1 : secure SF ([]::SGB) PC S1 (Scope::SGB) *
H1 : secure SF ([]::SGB) PC S1 (Scope1::SGB)
============================
 SGB = SGB
 < search.

Subgoal 2.12:

Variables: SF SGA SGB E
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGA
IsPC : is_slev public
SecA : secure SF SGA public (printVal E) SGA @
SecB : secure SF SGA public (printVal E) SGB
SecA1 : level SF SGA public E public *
============================
 SGA = SGB
 < case SecB.

Subgoal 2.12:

Variables: SF SGB E
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SGB
IsPC : is_slev public
SecA : secure SF SGB public (printVal E) SGB @
SecA1 : level SF SGB public E public *
H1 : level SF SGB public E public
============================
 SGB = SGB
 < search.

Subgoal 2.13:

Variables: SF PC SGB L SG1 Scope X E Ty
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
IsPC : is_slev PC
SecA : secure SF (Scope::SG1) PC (secdecl private Ty X E) (((X, private)::Scope)::SG1) @
SecB : secure SF (Scope::SG1) PC (secdecl private Ty X E) SGB
SecA1 : level SF (Scope::SG1) PC E L *
SecA2 : no_lookup Scope X
============================
 ((X, private)::Scope)::SG1 = SGB
 < case SecB.

Subgoal 2.13:

Variables: SF PC L SG1 Scope X E Ty L1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
IsPC : is_slev PC
SecA : secure SF (Scope::SG1) PC (secdecl private Ty X E) (((X, private)::Scope)::SG1) @
SecA1 : level SF (Scope::SG1) PC E L *
SecA2 : no_lookup Scope X
H1 : level SF (Scope::SG1) PC E L1
H2 : no_lookup Scope X
============================
 ((X, private)::Scope)::SG1 = ((X, private)::Scope)::SG1
 < search.

Subgoal 2.14:

Variables: SF SGB SG1 Scope X E Ty
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
IsPC : is_slev public
SecA : secure SF (Scope::SG1) public (secdecl public Ty X E) (((X, public)::Scope)::SG1) @
SecB : secure SF (Scope::SG1) public (secdecl public Ty X E) SGB
SecA1 : level SF (Scope::SG1) public E public *
SecA2 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG1 = SGB
 < case SecB.

Subgoal 2.14:

Variables: SF SG1 Scope X E Ty
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG1)
IsPC : is_slev public
SecA : secure SF (Scope::SG1) public (secdecl public Ty X E) (((X, public)::Scope)::SG1) @
SecA1 : level SF (Scope::SG1) public E public *
SecA2 : no_lookup Scope X
H1 : level SF (Scope::SG1) public E public
H2 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG1 = ((X, public)::Scope)::SG1
 < search.

Subgoal 2.15:

Variables: SF SG PC SGA SGB Names S_P
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC <unknown I stmt> SGA @
SecB : secure SF SG PC <unknown I stmt> SGB
SecA1 : names SG Names
SecA2 : Names |{stmt}- <unknown I stmt> ~~> S_P
SecA3 : secure SF SG PC S_P SGA *
============================
 SGA = SGB
 < SecB: case SecB.

Subgoal 2.15:

Variables: SF SG PC SGA SGB Names S_P Names1 S_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC <unknown I stmt> SGA @
SecA1 : names SG Names
SecA2 : Names |{stmt}- <unknown I stmt> ~~> S_P
SecA3 : secure SF SG PC S_P SGA *
SecB : names SG Names1
SecB1 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecB2 : secure SF SG PC S_P1 SGB
============================
 SGA = SGB
 < apply names_is_sec to _ SecA1.

Subgoal 2.15:

Variables: SF SG PC SGA SGB Names S_P Names1 S_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC <unknown I stmt> SGA @
SecA1 : names SG Names
SecA2 : Names |{stmt}- <unknown I stmt> ~~> S_P
SecA3 : secure SF SG PC S_P SGA *
SecB : names SG Names1
SecB1 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecB2 : secure SF SG PC S_P1 SGB
H1 : is_list is_string Names
============================
 SGA = SGB
 < apply proj_stmt_is to SecA2 _ _.

Subgoal 2.15:

Variables: SF SG PC SGA SGB Names S_P Names1 S_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC <unknown I stmt> SGA @
SecA1 : names SG Names
SecA2 : Names |{stmt}- <unknown I stmt> ~~> S_P
SecA3 : secure SF SG PC S_P SGA *
SecB : names SG Names1
SecB1 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecB2 : secure SF SG PC S_P1 SGB
H1 : is_list is_string Names
H2 : is_stmt S_P
============================
 SGA = SGB
 < apply names_unique to SecA1 SecB.

Subgoal 2.15:

Variables: SF SG PC SGA SGB S_P Names1 S_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC <unknown I stmt> SGA @
SecA1 : names SG Names1
SecA2 : Names1 |{stmt}- <unknown I stmt> ~~> S_P
SecA3 : secure SF SG PC S_P SGA *
SecB : names SG Names1
SecB1 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecB2 : secure SF SG PC S_P1 SGB
H1 : is_list is_string Names1
H2 : is_stmt S_P
============================
 SGA = SGB
 < apply proj_stmt_unique to SecA2 SecB1 _ _ _ _ _.

Subgoal 2.15:

Variables: SF SG PC SGA SGB Names1 S_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC <unknown I stmt> SGA @
SecA1 : names SG Names1
SecA2 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecA3 : secure SF SG PC S_P1 SGA *
SecB : names SG Names1
SecB1 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecB2 : secure SF SG PC S_P1 SGB
H1 : is_list is_string Names1
H2 : is_stmt S_P1
============================
 SGA = SGB
 < apply IH_S to _ _ _ _ SecA3 SecB2.

Subgoal 2.15:

Variables: SF SG PC SGB Names1 S_P1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
SecA : secure SF SG PC <unknown I stmt> SGB @
SecA1 : names SG Names1
SecA2 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecA3 : secure SF SG PC S_P1 SGB *
SecB : names SG Names1
SecB1 : Names1 |{stmt}- <unknown I stmt> ~~> S_P1
SecB2 : secure SF SG PC S_P1 SGB
H1 : is_list is_string Names1
H2 : is_stmt S_P1
============================
 SGB = SGB
 < search.

Subgoal 3:

Variables: SF SG PC A LA LB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC A LA @
LevB : levelArgs SF SG PC A LB
============================
 LA = LB
 < LevA: case LevA (keep).

Subgoal 3.1:

Variables: SF SG PC LB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC nilArgs [] @
LevB : levelArgs SF SG PC nilArgs LB
============================
 [] = LB
 < case LevB.

Subgoal 3.1:

Variables: SF SG PC
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC nilArgs [] @
============================
 [] = []
 < search.

Subgoal 3.2:

Variables: SF SG PC LB Rest L A1 E
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsA : is_args (consArgs E A1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC (consArgs E A1) (L::Rest) @
LevB : levelArgs SF SG PC (consArgs E A1) LB
LevA1 : level SF SG PC E L *
LevA2 : levelArgs SF SG PC A1 Rest *
============================
 L::Rest = LB
 < case IsA.

Subgoal 3.2:

Variables: SF SG PC LB Rest L A1 E
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC (consArgs E A1) (L::Rest) @
LevB : levelArgs SF SG PC (consArgs E A1) LB
LevA1 : level SF SG PC E L *
LevA2 : levelArgs SF SG PC A1 Rest *
H1 : is_expr E
H2 : is_args A1
============================
 L::Rest = LB
 < LevB: case LevB.

Subgoal 3.2:

Variables: SF SG PC Rest L A1 E Rest1 L1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC (consArgs E A1) (L::Rest) @
LevA1 : level SF SG PC E L *
LevA2 : levelArgs SF SG PC A1 Rest *
H1 : is_expr E
H2 : is_args A1
LevB : level SF SG PC E L1
LevB1 : levelArgs SF SG PC A1 Rest1
============================
 L::Rest = L1::Rest1
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 3.2:

Variables: SF SG PC Rest A1 E Rest1 L1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC (consArgs E A1) (L1::Rest) @
LevA1 : level SF SG PC E L1 *
LevA2 : levelArgs SF SG PC A1 Rest *
H1 : is_expr E
H2 : is_args A1
LevB : level SF SG PC E L1
LevB1 : levelArgs SF SG PC A1 Rest1
============================
 L1::Rest = L1::Rest1
 < apply IH_A to _ _ _ _ LevA2 LevB1.

Subgoal 3.2:

Variables: SF SG PC A1 E Rest1 L1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelArgs SF SG PC (consArgs E A1) (L1::Rest1) @
LevA1 : level SF SG PC E L1 *
LevA2 : levelArgs SF SG PC A1 Rest1 *
H1 : is_expr E
H2 : is_args A1
LevB : level SF SG PC E L1
LevB1 : levelArgs SF SG PC A1 Rest1
============================
 L1::Rest1 = L1::Rest1
 < search.

Subgoal 4:

Variables: SF SG PC RF LA LB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC RF LA @
LevB : levelRecFields SF SG PC RF LB
============================
 LA = LB
 < LevA: case LevA (keep).

Subgoal 4.1:

Variables: SF SG PC LB
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC nilRecFieldExprs public @
LevB : levelRecFields SF SG PC nilRecFieldExprs LB
============================
 public = LB
 < case LevB.

Subgoal 4.1:

Variables: SF SG PC
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC nilRecFieldExprs public @
============================
 public = public
 < search.

Subgoal 4.2:

Variables: SF SG PC LA LB LE LRF RF1 E F
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsRF : is_recFieldExprs (consRecFieldExprs F E RF1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LA @
LevB : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LB
LevA1 : level SF SG PC E LE *
LevA2 : levelRecFields SF SG PC RF1 LRF *
LevA3 : join LE LRF LA
============================
 LA = LB
 < case IsRF.

Subgoal 4.2:

Variables: SF SG PC LA LB LE LRF RF1 E F
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LA @
LevB : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LB
LevA1 : level SF SG PC E LE *
LevA2 : levelRecFields SF SG PC RF1 LRF *
LevA3 : join LE LRF LA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
============================
 LA = LB
 < LevB: case LevB.

Subgoal 4.2:

Variables: SF SG PC LA LB LE LRF RF1 E F LE1 LRF1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LA @
LevA1 : level SF SG PC E LE *
LevA2 : levelRecFields SF SG PC RF1 LRF *
LevA3 : join LE LRF LA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
LevB : level SF SG PC E LE1
LevB1 : levelRecFields SF SG PC RF1 LRF1
LevB2 : join LE1 LRF1 LB
============================
 LA = LB
 < apply IH_E to _ _ _ _ LevA1 LevB.

Subgoal 4.2:

Variables: SF SG PC LA LB LRF RF1 E F LE1 LRF1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LA @
LevA1 : level SF SG PC E LE1 *
LevA2 : levelRecFields SF SG PC RF1 LRF *
LevA3 : join LE1 LRF LA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
LevB : level SF SG PC E LE1
LevB1 : levelRecFields SF SG PC RF1 LRF1
LevB2 : join LE1 LRF1 LB
============================
 LA = LB
 < apply IH_RF to _ _ _ _ LevA2 LevB1.

Subgoal 4.2:

Variables: SF SG PC LA LB RF1 E F LE1 LRF1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LA @
LevA1 : level SF SG PC E LE1 *
LevA2 : levelRecFields SF SG PC RF1 LRF1 *
LevA3 : join LE1 LRF1 LA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
LevB : level SF SG PC E LE1
LevB1 : levelRecFields SF SG PC RF1 LRF1
LevB2 : join LE1 LRF1 LB
============================
 LA = LB
 < apply level_is to _ _ _ LevA1.

Subgoal 4.2:

Variables: SF SG PC LA LB RF1 E F LE1 LRF1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LA @
LevA1 : level SF SG PC E LE1 *
LevA2 : levelRecFields SF SG PC RF1 LRF1 *
LevA3 : join LE1 LRF1 LA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
LevB : level SF SG PC E LE1
LevB1 : levelRecFields SF SG PC RF1 LRF1
LevB2 : join LE1 LRF1 LB
H4 : is_slev LE1
============================
 LA = LB
 < apply levelRecFields_is to _ _ _ LevA2.

Subgoal 4.2:

Variables: SF SG PC LA LB RF1 E F LE1 LRF1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LA @
LevA1 : level SF SG PC E LE1 *
LevA2 : levelRecFields SF SG PC RF1 LRF1 *
LevA3 : join LE1 LRF1 LA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
LevB : level SF SG PC E LE1
LevB1 : levelRecFields SF SG PC RF1 LRF1
LevB2 : join LE1 LRF1 LB
H4 : is_slev LE1
H5 : is_slev LRF1
============================
 LA = LB
 < apply join_unique to _ _ LevA3 LevB2.

Subgoal 4.2:

Variables: SF SG PC LB RF1 E F LE1 LRF1
IH_E : forall SF SG PC E LA LB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> level SF SG PC E LA * ->
         level SF SG PC E LB -> LA = LB
IH_S : forall SF SG PC S SGA SGB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> secure SF SG PC S SGA * ->
         secure SF SG PC S SGB -> SGA = SGB
IH_A : forall SF SG PC A LA LB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelArgs SF SG PC A LA * ->
         levelArgs SF SG PC A LB -> LA = LB
IH_RF : forall SF SG PC RF LA LB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> levelRecFields SF SG PC RF LA * ->
          levelRecFields SF SG PC RF LB -> LA = LB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
LevA : levelRecFields SF SG PC (consRecFieldExprs F E RF1) LB @
LevA1 : level SF SG PC E LE1 *
LevA2 : levelRecFields SF SG PC RF1 LRF1 *
LevA3 : join LE1 LRF1 LB
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
LevB : level SF SG PC E LE1
LevB1 : levelRecFields SF SG PC RF1 LRF1
LevB2 : join LE1 LRF1 LB
H4 : is_slev LE1
H5 : is_slev LRF1
============================
 LB = LB
 < search.

Proof completed.
 < Extensible_Theorem
      secure_older_scopes : forall SF Scope SG PC S SG',
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG) ->
         Sec : secure SF (Scope::SG) PC S SG' ->
         exists Scope',
           SG' = Scope'::SG /\
           (forall X L, lookup Scope X L -> lookup Scope' X L)
      on Sec.

Subgoal 1:

Variables: SF Scope SG PC
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC noop (Scope::SG) @
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 2:

Variables: SF Scope SG PC SG' SG3 S2 S1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) SG' @
Sec1 : secure SF (Scope::SG) PC S1 SG3 *
Sec2 : secure SF SG3 PC S2 SG' *
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < case IsS.

Subgoal 2:

Variables: SF Scope SG PC SG' SG3 S2 S1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) SG' @
Sec1 : secure SF (Scope::SG) PC S1 SG3 *
Sec2 : secure SF SG3 PC S2 SG' *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < A: apply IH to _ _ _ Sec1.

Subgoal 2:

Variables: SF Scope SG PC SG' S2 S1 Scope'
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) SG' @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 SG' *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < apply secure_is to _ _ _ Sec1.

Subgoal 2:

Variables: SF Scope SG PC SG' S2 S1 Scope'
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) SG' @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 SG' *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < B: apply IH to _ _ _ Sec2.

Subgoal 2:

Variables: SF Scope SG PC S2 S1 Scope' Scope'1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) (Scope'1::SG) @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 (Scope'1::SG) *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
B : forall X L, lookup Scope' X L -> lookup Scope'1 X L
============================
 exists Scope',
   Scope'1::SG = Scope'::SG /\
   (forall X L, lookup Scope X L -> lookup Scope' X L)
 < exists Scope'1.

Subgoal 2:

Variables: SF Scope SG PC S2 S1 Scope' Scope'1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) (Scope'1::SG) @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 (Scope'1::SG) *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
B : forall X L, lookup Scope' X L -> lookup Scope'1 X L
============================
 Scope'1::SG = Scope'1::SG /\
 (forall X L, lookup Scope X L -> lookup Scope'1 X L)
 < split.

Subgoal 2.1:

Variables: SF Scope SG PC S2 S1 Scope' Scope'1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) (Scope'1::SG) @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 (Scope'1::SG) *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
B : forall X L, lookup Scope' X L -> lookup Scope'1 X L
============================
 Scope'1::SG = Scope'1::SG
 < search.

Subgoal 2.2:

Variables: SF Scope SG PC S2 S1 Scope' Scope'1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) (Scope'1::SG) @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 (Scope'1::SG) *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
B : forall X L, lookup Scope' X L -> lookup Scope'1 X L
============================
 forall X L, lookup Scope X L -> lookup Scope'1 X L
 < intros L.

Subgoal 2.2:

Variables: SF Scope SG PC S2 S1 Scope' Scope'1 X L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) (Scope'1::SG) @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 (Scope'1::SG) *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
B : forall X L, lookup Scope' X L -> lookup Scope'1 X L
L : lookup Scope X L
============================
 lookup Scope'1 X L
 < L': apply A to L.

Subgoal 2.2:

Variables: SF Scope SG PC S2 S1 Scope' Scope'1 X L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) (Scope'1::SG) @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 (Scope'1::SG) *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
B : forall X L, lookup Scope' X L -> lookup Scope'1 X L
L : lookup Scope X L
L' : lookup Scope' X L
============================
 lookup Scope'1 X L
 < apply B to L'.

Subgoal 2.2:

Variables: SF Scope SG PC S2 S1 Scope' Scope'1 X L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (seq S1 S2) (Scope'1::SG) @
Sec1 : secure SF (Scope::SG) PC S1 (Scope'::SG) *
Sec2 : secure SF (Scope'::SG) PC S2 (Scope'1::SG) *
H1 : is_stmt S1
H2 : is_stmt S2
A : forall X L, lookup Scope X L -> lookup Scope' X L
H3 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
B : forall X L, lookup Scope' X L -> lookup Scope'1 X L
L : lookup Scope X L
L' : lookup Scope' X L
H4 : lookup Scope'1 X L
============================
 lookup Scope'1 X L
 < search.

Subgoal 3:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 exists Scope',
   ((X, public)::Scope)::SG = Scope'::SG /\
   (forall X1 L, lookup Scope X1 L -> lookup Scope' X1 L)
 < exists (X, public)::Scope.

Subgoal 3:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG = ((X, public)::Scope)::SG /\
 (forall X1 L, lookup Scope X1 L -> lookup ((X, public)::Scope) X1 L)
 < split.

Subgoal 3.1:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG = ((X, public)::Scope)::SG
 < search.

Subgoal 3.2:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 forall X1 L, lookup Scope X1 L -> lookup ((X, public)::Scope) X1 L
 < intros L.

Subgoal 3.2:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
============================
 lookup ((X, public)::Scope) X1 L
 < assert X = X1 -> false.

Subgoal 3.2.1:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
============================
 X = X1 -> false
 < intros E.

Subgoal 3.2.1:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
E : X = X1
============================
 false
 < case E.

Subgoal 3.2.1:

Variables: SF Scope SG E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X1 E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X1 E) (((X1, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X1
L : lookup Scope X1 L
============================
 false
 < apply no_lookup to Sec2 L.

Subgoal 3.2:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (declare Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
H1 : X = X1 -> false
============================
 lookup ((X, public)::Scope) X1 L
 < search.

Subgoal 4:

Variables: SF Scope SG PC L E X
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (assign X E) (Scope::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : lookupScopes X (Scope::SG) private
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 5:

Variables: SF Scope SG E X
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (assign X E) (Scope::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : lookupScopes X (Scope::SG) public
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 6:

Variables: SF Scope SG PC L E Fields Rec
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (recUpdate Rec Fields E) (Scope::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : lookupScopes Rec (Scope::SG) private
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 7:

Variables: SF Scope SG E Fields Rec
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (recUpdate Rec Fields E) (Scope::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : lookupScopes Rec (Scope::SG) public
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 8:

Variables: SF Scope SG PC L Sl1 SGT SGF F T E
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (ifThenElse E T F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (ifThenElse E T F) (Scope::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : join L PC Sl1
Sec3 : secure SF ([]::(Scope::SG)) Sl1 T SGT *
Sec4 : secure SF ([]::(Scope::SG)) Sl1 F SGF *
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 9:

Variables: SF Scope SG L Scope1 SG2 S1 E
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) private (while E S1) (Scope::SG) @
Sec1 : level SF (Scope::SG) private E L *
Sec2 : secure SF ([]::(Scope::SG)) private S1 (Scope1::SG2) *
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 10:

Variables: SF Scope SG Scope1 SG2 S1 E
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (while E S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (while E S1) (Scope::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : secure SF ([]::(Scope::SG)) public S1 (Scope1::SG2) *
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 11:

Variables: SF Scope SG PC Scope1 S1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (scopeStmt S1) (Scope::SG) @
Sec1 : secure SF ([]::(Scope::SG)) PC S1 (Scope1::(Scope::SG)) *
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 12:

Variables: SF Scope SG E
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (printVal E) (Scope::SG) @
Sec1 : level SF (Scope::SG) public E public *
============================
 exists Scope',
   Scope::SG = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < search.

Subgoal 13:

Variables: SF Scope SG PC L X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
============================
 exists Scope',
   ((X, private)::Scope)::SG = Scope'::SG /\
   (forall X1 L, lookup Scope X1 L -> lookup Scope' X1 L)
 < exists (X, private)::Scope.

Subgoal 13:

Variables: SF Scope SG PC L X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
============================
 ((X, private)::Scope)::SG = ((X, private)::Scope)::SG /\
 (forall X1 L, lookup Scope X1 L -> lookup ((X, private)::Scope) X1 L)
 < split.

Subgoal 13.1:

Variables: SF Scope SG PC L X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
============================
 ((X, private)::Scope)::SG = ((X, private)::Scope)::SG
 < search.

Subgoal 13.2:

Variables: SF Scope SG PC L X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
============================
 forall X1 L, lookup Scope X1 L -> lookup ((X, private)::Scope) X1 L
 < intros L.

Subgoal 13.2:

Variables: SF Scope SG PC L X E Ty X1 L1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L1
============================
 lookup ((X, private)::Scope) X1 L1
 < assert X = X1 -> false.

Subgoal 13.2.1:

Variables: SF Scope SG PC L X E Ty X1 L1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L1
============================
 X = X1 -> false
 < intros E.

Subgoal 13.2.1:

Variables: SF Scope SG PC L X E Ty X1 L1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L1
E : X = X1
============================
 false
 < case E.

Subgoal 13.2.1:

Variables: SF Scope SG PC L E Ty X1 L1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X1 E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X1 E) (((X1, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X1
L : lookup Scope X1 L1
============================
 false
 < apply no_lookup to Sec2 L.

Subgoal 13.2:

Variables: SF Scope SG PC L X E Ty X1 L1
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl private Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC (secdecl private Ty X E) (((X, private)::Scope)::SG) @
Sec1 : level SF (Scope::SG) PC E L *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L1
H1 : X = X1 -> false
============================
 lookup ((X, private)::Scope) X1 L1
 < search.

Subgoal 14:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 exists Scope',
   ((X, public)::Scope)::SG = Scope'::SG /\
   (forall X1 L, lookup Scope X1 L -> lookup Scope' X1 L)
 < exists (X, public)::Scope.

Subgoal 14:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG = ((X, public)::Scope)::SG /\
 (forall X1 L, lookup Scope X1 L -> lookup ((X, public)::Scope) X1 L)
 < split.

Subgoal 14.1:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 ((X, public)::Scope)::SG = ((X, public)::Scope)::SG
 < search.

Subgoal 14.2:

Variables: SF Scope SG X E Ty
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
============================
 forall X1 L, lookup Scope X1 L -> lookup ((X, public)::Scope) X1 L
 < intros L.

Subgoal 14.2:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
============================
 lookup ((X, public)::Scope) X1 L
 < assert X = X1 -> false.

Subgoal 14.2.1:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
============================
 X = X1 -> false
 < intros E.

Subgoal 14.2.1:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
E : X = X1
============================
 false
 < case E.

Subgoal 14.2.1:

Variables: SF Scope SG E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X1 E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X1 E) (((X1, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X1
L : lookup Scope X1 L
============================
 false
 < apply no_lookup to Sec2 L.

Subgoal 14.2:

Variables: SF Scope SG X E Ty X1 L
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt (secdecl public Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) public (secdecl public Ty X E) (((X, public)::Scope)::SG) @
Sec1 : level SF (Scope::SG) public E public *
Sec2 : no_lookup Scope X
L : lookup Scope X1 L
H1 : X = X1 -> false
============================
 lookup ((X, public)::Scope) X1 L
 < search.

Subgoal 15:

Variables: SF Scope SG PC SG' Names S_P
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC <unknown I stmt> SG' @
Sec1 : names (Scope::SG) Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF (Scope::SG) PC S_P SG' *
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < apply names_is_sec to _ Sec1.

Subgoal 15:

Variables: SF Scope SG PC SG' Names S_P
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC <unknown I stmt> SG' @
Sec1 : names (Scope::SG) Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF (Scope::SG) PC S_P SG' *
H1 : is_list is_string Names
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < apply proj_stmt_is to Sec2 _ _.

Subgoal 15:

Variables: SF Scope SG PC SG' Names S_P
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC <unknown I stmt> SG' @
Sec1 : names (Scope::SG) Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF (Scope::SG) PC S_P SG' *
H1 : is_list is_string Names
H2 : is_stmt S_P
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < apply proj_stmt_is to Sec2 _ _.

Subgoal 15:

Variables: SF Scope SG PC SG' Names S_P
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC <unknown I stmt> SG' @
Sec1 : names (Scope::SG) Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF (Scope::SG) PC S_P SG' *
H1 : is_list is_string Names
H2 : is_stmt S_P
H3 : is_stmt S_P
============================
 exists Scope',
   SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
 < apply IH to _ _ _ Sec3.

Subgoal 15:

Variables: SF Scope SG PC Names S_P Scope'
IH : forall SF Scope SG PC S SG',
       is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) (Scope::SG) -> secure SF (Scope::SG) PC S SG' * ->
       exists Scope',
         SG' = Scope'::SG /\ (forall X L, lookup Scope X L -> lookup Scope' X L)
IsS : is_stmt <unknown I stmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope::SG)
Sec : secure SF (Scope::SG) PC <unknown I stmt> (Scope'::SG) @
Sec1 : names (Scope::SG) Names
Sec2 : Names |{stmt}- <unknown I stmt> ~~> S_P
Sec3 : secure SF (Scope::SG) PC S_P (Scope'::SG) *
H1 : is_list is_string Names
H2 : is_stmt S_P
H3 : is_stmt S_P
H4 : forall X L, lookup Scope X L -> lookup Scope' X L
============================
 exists Scope'1,
   Scope'::SG = Scope'1::SG /\
   (forall X L, lookup Scope X L -> lookup Scope'1 X L)
 < search.

Proof completed.
 < Theorem names_same_scopes_same  [V] :
     forall A B (C : list (list (pair (string) V))),
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C -> scopes_same A B -> names_same B C.

============================
 forall A B C,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   names_same A C -> scopes_same A B -> names_same B C
 < induction on 3.

IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
============================
 forall A B C,
   is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
   names_same A C @ -> scopes_same A B -> names_same B C
 < intros IsA IsB NS SS.

Variables: A B C
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
IsA : is_list (is_list (is_pair is_string is_value)) A
IsB : is_list (is_list (is_pair is_string is_value)) B
NS : names_same A C @
SS : scopes_same A B
============================
 names_same B C
 < NS: case NS.

Subgoal 1:

Variables: B
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
IsA : is_list (is_list (is_pair is_string is_value)) []
IsB : is_list (is_list (is_pair is_string is_value)) B
SS : scopes_same [] B
============================
 names_same B []
 < case SS.

Subgoal 1:

IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
IsA : is_list (is_list (is_pair is_string is_value)) []
IsB : is_list (is_list (is_pair is_string is_value)) []
============================
 names_same [] []
 < search.

Subgoal 2:

Variables: B BRest B1 ARest A1
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsB : is_list (is_list (is_pair is_string is_value)) B
SS : scopes_same (A1::ARest) B
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
============================
 names_same B (B1::BRest)
 < SS: case SS.

Subgoal 2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest)
IsB : is_list (is_list (is_pair is_string is_value)) (B2::BRest1)
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
============================
 names_same (B2::BRest1) (B1::BRest)
 < IsA: case IsA.

Subgoal 2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
IsB : is_list (is_list (is_pair is_string is_value)) (B2::BRest1)
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
============================
 names_same (B2::BRest1) (B1::BRest)
 < IsB: case IsB.

Subgoal 2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
============================
 names_same (B2::BRest1) (B1::BRest)
 < unfold .

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
============================
 forall X IA, mem (X, IA) B2 -> exists IB, mem (X, IB) B1
 < intros MB.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X IA
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MB : mem (X, IA) B2
============================
 exists IB, mem (X, IB) B1
 < IsP: apply mem_is to _ MB.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X IA
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MB : mem (X, IA) B2
IsP : is_pair is_string is_value (X, IA)
============================
 exists IB, mem (X, IB) B1
 < IsX: case IsP.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X IA
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MB : mem (X, IA) B2
IsX : is_string X
IsX1 : is_value IA
============================
 exists IB, mem (X, IB) B1
 < LB: apply is_list_mem_lookup to _ MB _.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X IA E'
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MB : mem (X, IA) B2
IsX : is_string X
IsX1 : is_value IA
LB : lookup B2 X E'
============================
 exists IB, mem (X, IB) B1
 < LA: apply SS1 to LB.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X IA E'
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MB : mem (X, IA) B2
IsX : is_string X
IsX1 : is_value IA
LB : lookup B2 X E'
LA : lookup A1 X E'
============================
 exists IB, mem (X, IB) B1
 < MA: apply lookup_mem to LA.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X IA E'
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MB : mem (X, IA) B2
IsX : is_string X
IsX1 : is_value IA
LB : lookup B2 X E'
LA : lookup A1 X E'
MA : mem (X, E') A1
============================
 exists IB, mem (X, IB) B1
 < apply NS to MA.

Subgoal 2.1:

Variables: BRest B1 ARest A1 BRest1 B2 X IA E' IB
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MB : mem (X, IA) B2
IsX : is_string X
IsX1 : is_value IA
LB : lookup B2 X E'
LA : lookup A1 X E'
MA : mem (X, E') A1
H1 : mem (X, IB) B1
============================
 exists IB, mem (X, IB) B1
 < search.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
============================
 forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) B2
 < intros MC.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X IB
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MC : mem (X, IB) B1
============================
 exists IA, mem (X, IA) B2
 < MA: apply NS1 to MC.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X IB IA
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MC : mem (X, IB) B1
MA : mem (X, IA) A1
============================
 exists IA, mem (X, IA) B2
 < IsP: apply mem_is to _ MA.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X IB IA
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MC : mem (X, IB) B1
MA : mem (X, IA) A1
IsP : is_pair is_string is_value (X, IA)
============================
 exists IA, mem (X, IA) B2
 < IsX: case IsP.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X IB IA
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MC : mem (X, IB) B1
MA : mem (X, IA) A1
IsX : is_string X
IsX1 : is_value IA
============================
 exists IA, mem (X, IA) B2
 < LA: apply is_list_mem_lookup to _ MA _.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X IB IA E'
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MC : mem (X, IB) B1
MA : mem (X, IA) A1
IsX : is_string X
IsX1 : is_value IA
LA : lookup A1 X E'
============================
 exists IA, mem (X, IA) B2
 < LB: apply SS to LA.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X IB IA E'
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MC : mem (X, IB) B1
MA : mem (X, IA) A1
IsX : is_string X
IsX1 : is_value IA
LA : lookup A1 X E'
LB : lookup B2 X E'
============================
 exists IA, mem (X, IA) B2
 < MB: apply lookup_mem to LB.

Subgoal 2.2:

Variables: BRest B1 ARest A1 BRest1 B2 X IB IA E'
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
MC : mem (X, IB) B1
MA : mem (X, IA) A1
IsX : is_string X
IsX1 : is_value IA
LA : lookup A1 X E'
LB : lookup B2 X E'
MB : mem (X, E') B2
============================
 exists IA, mem (X, IA) B2
 < search.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
============================
 names_same BRest1 BRest
 < apply IH to _ _ NS2 SS2.

Subgoal 2.3:

Variables: BRest B1 ARest A1 BRest1 B2
IH : forall A B C,
       is_list (is_list (is_pair is_string is_value)) A -> is_list (is_list (is_pair is_string is_value)) B ->
       names_same A C * -> scopes_same A B -> names_same B C
NS : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B1
NS1 : forall X IB, mem (X, IB) B1 -> exists IA, mem (X, IA) A1
NS2 : names_same ARest BRest *
SS : forall X V, lookup A1 X V -> lookup B2 X V
SS1 : forall X V, lookup B2 X V -> lookup A1 X V
SS2 : scopes_same ARest BRest1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest
IsB : is_list (is_pair is_string is_value) B2
IsB1 : is_list (is_list (is_pair is_string is_value)) BRest1
H1 : names_same BRest1 BRest
============================
 names_same BRest1 BRest
 < search.

Proof completed.
 < Theorem zip_names_same  [A, B] :
     forall (Names : list (string)) (A : list A) (B : list B) ZA ZB,
       zip Names A ZA -> zip Names B ZB -> names_same [ZA] [ZB].

============================
 forall Names A B ZA ZB,
   zip Names A ZA -> zip Names B ZB -> names_same [ZA] [ZB]
 < induction on 1.

IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
============================
 forall Names A B ZA ZB,
   zip Names A ZA @ -> zip Names B ZB -> names_same [ZA] [ZB]
 < intros ZA ZB.

Variables: Names A B ZA ZB
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip Names A ZA @
ZB : zip Names B ZB
============================
 names_same [ZA] [ZB]
 < ZA: case ZA.

Subgoal 1:

Variables: B ZB
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZB : zip [] B ZB
============================
 names_same [[]] [ZB]
 < case ZB.

Subgoal 1:

IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
============================
 names_same [[]] [[]]
 < unfold .

Subgoal 1.1:

IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
============================
 forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
 < intros M.

Subgoal 1.1:

Variables: X IA
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
M : mem (X, IA) []
============================
 exists IB, mem (X, IB) []
 < case M.

Subgoal 1.2:

IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
============================
 forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
 < intros M.

Subgoal 1.2:

Variables: X IB
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
M : mem (X, IB) []
============================
 exists IA, mem (X, IA) []
 < case M.

Subgoal 1.3:

IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
============================
 names_same [] []
 < search.

Subgoal 2:

Variables: B ZB Rest B1 A1 BRest ARest
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZB : zip (A1::ARest) B ZB
ZA : zip ARest BRest Rest *
============================
 names_same [(A1, B1)::Rest] [ZB]
 < ZB: case ZB.

Subgoal 2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
============================
 names_same [(A1, B1)::Rest] [(A1, B2)::Rest1]
 < NS: apply IH to ZA ZB.

Subgoal 2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : names_same [Rest] [Rest1]
============================
 names_same [(A1, B1)::Rest] [(A1, B2)::Rest1]
 < NS: case NS.

Subgoal 2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
============================
 names_same [(A1, B1)::Rest] [(A1, B2)::Rest1]
 < unfold .

Subgoal 2.1:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
============================
 forall X IA,
   mem (X, IA) ((A1, B1)::Rest) -> exists IB, mem (X, IB) ((A1, B2)::Rest1)
 < intros M.

Subgoal 2.1:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1 X IA
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
M : mem (X, IA) ((A1, B1)::Rest)
============================
 exists IB, mem (X, IB) ((A1, B2)::Rest1)
 < M: case M.

Subgoal 2.1.1:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
============================
 exists IB, mem (A1, IB) ((A1, B2)::Rest1)
 < search.

Subgoal 2.1.2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1 X IA
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
M : mem (X, IA) Rest
============================
 exists IB, mem (X, IB) ((A1, B2)::Rest1)
 < apply NS to M.

Subgoal 2.1.2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1 X IA IB
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
M : mem (X, IA) Rest
H1 : mem (X, IB) Rest1
============================
 exists IB, mem (X, IB) ((A1, B2)::Rest1)
 < search.

Subgoal 2.2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
============================
 forall X IB,
   mem (X, IB) ((A1, B2)::Rest1) -> exists IA, mem (X, IA) ((A1, B1)::Rest)
 < intros M.

Subgoal 2.2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1 X IB
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
M : mem (X, IB) ((A1, B2)::Rest1)
============================
 exists IA, mem (X, IA) ((A1, B1)::Rest)
 < M: case M.

Subgoal 2.2.1:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
============================
 exists IA, mem (A1, IA) ((A1, B1)::Rest)
 < search.

Subgoal 2.2.2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1 X IB
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
M : mem (X, IB) Rest1
============================
 exists IA, mem (X, IA) ((A1, B1)::Rest)
 < apply NS1 to M.

Subgoal 2.2.2:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1 X IB IA
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
M : mem (X, IB) Rest1
H1 : mem (X, IA) Rest
============================
 exists IA, mem (X, IA) ((A1, B1)::Rest)
 < search.

Subgoal 2.3:

Variables: Rest B1 A1 BRest ARest Rest1 B2 BRest1
IH : forall Names A B ZA ZB,
       zip Names A ZA * -> zip Names B ZB -> names_same [ZA] [ZB]
ZA : zip ARest BRest Rest *
ZB : zip ARest BRest1 Rest1
NS : forall X IA, mem (X, IA) Rest -> exists IB, mem (X, IB) Rest1
NS1 : forall X IB, mem (X, IB) Rest1 -> exists IA, mem (X, IA) Rest
NS2 : names_same [] []
============================
 names_same [] []
 < search.

Proof completed.
 < Extensible_Theorem
      level_eval_names_same : forall E SF SG PC L FE EE V EE' O,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         NS : names_same EE SG ->
         Ev : evalExpr FE EE E V EE' O ->
         Lev : level SF SG PC E L ->
         names_same EE' SG
      on Ev,
      secure_eval_names_same : forall S SF SG PC SG' FE Scope EE EE' O,
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) ->
         NS : names_same (Scope::EE) SG ->
         Ev : evalStmt FE (Scope::EE) S EE' O ->
         Sec : secure SF SG PC S SG' ->
         names_same EE' SG'
      on Ev,
      levelArgs_eval_names_same : forall A SF SG PC L FE EE V EE' O,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         NS : names_same EE SG ->
         Ev : evalArgs FE EE A V EE' O ->
         Lev : levelArgs SF SG PC A L ->
         names_same EE' SG
      on Ev,
      levelRecFields_eval_names_same : forall RF SF SG PC L FE EE V EE' O,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         NS : names_same EE SG ->
         Ev : evalRecFields FE EE RF V EE' O ->
         Lev : levelRecFields SF SG PC RF L ->
         names_same EE' SG
      on Ev.

Subgoal 1:

Variables: E SF SG PC L FE EE V EE' O
IsE : is_expr E
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE E V EE' O
Lev : level SF SG PC E L
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
 < search.

Subgoal 2:

Variables: S SF SG PC SG' FE Scope EE EE' O
IsS : is_stmt S
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) S EE' O
Sec : secure SF SG PC S SG'
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
 < search.

Subgoal 3:

Variables: A SF SG PC L FE EE V EE' O
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE A V EE' O
Lev : levelArgs SF SG PC A L
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
 < search.

Subgoal 4:

Variables: RF SF SG PC L FE EE V EE' O
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE RF V EE' O
Lev : levelRecFields SF SG PC RF L
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
 < search.

Subgoal 5.1.1:

Variables: SF SG PC L FE EE' I
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
Lev : level SF SG PC (num I) L
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.1.1:

Variables: SF SG PC FE EE' I
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
============================
 names_same EE' SG
 < search.

Subgoal 5.1.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (plus E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (plus E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (minus E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (minus E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (mult E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (mult E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (div E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (div E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.6:

Variables: SF SG PC L FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' true trueVal EE' [] @
Lev : level SF SG PC true L
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.1.6:

Variables: SF SG PC FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' true trueVal EE' [] @
============================
 names_same EE' SG
 < search.

Subgoal 5.1.7:

Variables: SF SG PC L FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' false falseVal EE' [] @
Lev : level SF SG PC false L
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.1.7:

Variables: SF SG PC FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' false falseVal EE' [] @
============================
 names_same EE' SG
 < search.

Subgoal 5.1.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Lev : level SF SG PC (and E1 E2) L
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Lev : level SF SG PC (and E1 E2) L
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev2.

Subgoal 5.1.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.9:

Variables: SF SG PC L FE EE EE' O E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.9:

Variables: SF SG PC L FE EE EE' O E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.9:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.9:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev2.

Subgoal 5.1.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.11:

Variables: SF SG PC L FE EE EE' O E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.11:

Variables: SF SG PC L FE EE EE' O E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.11:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.11:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev2.

Subgoal 5.1.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Lev : level SF SG PC (or E1 E2) L
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Lev : level SF SG PC (or E1 E2) L
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev2.

Subgoal 5.1.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.14:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Lev : level SF SG PC (not E1) L
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.14:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Lev : level SF SG PC (not E1) L
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.14:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.14:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
H2 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.15:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Lev : level SF SG PC (not E1) L
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.15:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Lev : level SF SG PC (not E1) L
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.15:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.15:

Variables: SF SG PC L FE EE EE' O E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
H2 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.20:

Variables: SF SG PC L FE EE' S
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
Lev : level SF SG PC (stringLit S) L
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.1.20:

Variables: SF SG PC FE EE' S
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
============================
 names_same EE' SG
 < search.

Subgoal 5.1.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Lev : level SF SG PC (appString E1 E2) L
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Lev : level SF SG PC (appString E1 E2) L
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ NS Ev1 Lev.

Subgoal 5.1.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.22:

Variables: SF SG PC L FE V EE' X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (name X) V EE' [] @
Lev : level SF SG PC (name X) L
Ev1 : lookupScopes X EE' V
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.1.22:

Variables: SF SG PC L FE V EE' X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
H1 : lookupScopes X SG L
============================
 names_same EE' SG
 < search.

Subgoal 5.1.23:

Variables: SF SG PC L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Lev : level SF SG PC (call Fun Args) L
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.23:

Variables: SF SG PC L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Lev : level SF SG PC (call Fun Args) L
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 names_same EE' SG
 < apply IH2 to _ _ _ _ _ NS Ev2 Lev1.

Subgoal 5.1.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.23.2:

Variables: SF SG L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
============================
 names_same EE' SG
 < apply IH2 to _ _ _ _ _ NS Ev2 Lev1.

Subgoal 5.1.23.2:

Variables: SF SG L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Lev : level SF SG PC (stmtExpr S E1) L
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Lev : level SF SG PC (stmtExpr S E1) L
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
============================
 names_same EE' SG
 < apply names_same_add_scope to NS.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
============================
 names_same EE' SG
 < apply IH1 to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
============================
 names_same EE' SG
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev2.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) (Scope::EE')
============================
 names_same EE' SG
 < apply secure_is to _ _ _ Lev.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) (Scope::EE')
H7 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 names_same EE' SG
 < NS': apply IH to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) (Scope::EE')
H7 : is_list (is_list (is_pair is_string is_slev)) SG2
NS' : names_same (Scope::EE') SG2
============================
 names_same EE' SG
 < case NS'.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (B::BRest)
Lev1 : level SF (B::BRest) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 (B::BRest)
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) (Scope::EE')
H7 : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE' BRest
============================
 names_same EE' SG
 < apply secure_older_scopes to _ _ _ Lev.

Subgoal 5.1.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 (Scope'::SG)
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) (Scope::EE')
H7 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
H9 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
H10 : names_same EE' SG
H11 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 names_same EE' SG
 < search.

Subgoal 5.1.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (recBuild RF)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Lev : level SF SG PC (recBuild RF) L
Ev1 : evalRecFields FE EE RF VF EE' O *
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Lev : level SF SG PC (recBuild RF) L
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
============================
 names_same EE' SG
 < apply IH3 to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.1.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
H2 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr (recFieldAccess Rec F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Lev : level SF SG PC (recFieldAccess Rec F) L
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
============================
 names_same EE' SG
 < case IsE.

Subgoal 5.1.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Lev : level SF SG PC (recFieldAccess Rec F) L
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.1.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
H3 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Lev : level SF SG PC <unknown K evalExpr> L
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
============================
 names_same EE' SG
 < apply names_is to _ Ev1.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
============================
 names_same EE' SG
 < apply names_is_sec to _ Lev.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 names_same EE' SG
 < apply proj_expr_unique to Lev1 Ev2 _ _ _ _ _.

Subgoal 5.1.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.1.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NS Ev1 Lev M.

Subgoal 5.1.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.1.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.1.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NS Ev1 Lev M.

Subgoal 5.1.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 names_same EE' SG
 < apply proj_expr_is to Lev1 _ _.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
============================
 names_same EE' SG
 < NS': apply IH to _ _ _ _ _ _ Ev3 Lev2.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
============================
 names_same EE' SG
 < EvP: apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 EE''
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
EvP : evalExpr FE EE E_P V EE'' O
EvP1 : scopes_same EE' EE''
============================
 names_same EE' SG
 < apply evalExpr_unique to _ _ _ EvP Ev3.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
EvP : evalExpr FE EE E_P V_P EE_P O_P
EvP1 : scopes_same EE' EE_P
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
EvP : evalExpr FE EE E_P V_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ EvP.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
EvP : evalExpr FE EE E_P V_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_list (is_list (is_pair is_string is_value)) EE_P
============================
 names_same EE' SG
 < SS: apply scopes_same_symm to EvP1.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
EvP : evalExpr FE EE E_P V_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_list (is_list (is_pair is_string is_value)) EE_P
SS : scopes_same EE_P EE'
============================
 names_same EE' SG
 < apply names_same_scopes_same to _ _ NS' SS.

Subgoal 5.1.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
EvP : evalExpr FE EE E_P V_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_list (is_list (is_pair is_string is_value)) EE_P
SS : scopes_same EE_P EE'
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.2.1:

Variables: SF SG PC SG' FE Scope EE
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
Sec : secure SF SG PC noop SG'
============================
 names_same (Scope::EE) SG'
 < case Sec.

Subgoal 5.2.1:

Variables: SF PC SG' FE Scope EE
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 names_same (Scope::EE) SG'
 < search.

Subgoal 5.2.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Sec : secure SF SG PC (seq S1 S2) SG'
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Sec : secure SF SG PC (seq S1 S2) SG'
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1 SG3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
============================
 names_same EE' SG'
 < NS': apply IH1 to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1 SG3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
NS' : names_same EE3 SG3
============================
 names_same EE' SG'
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.2.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1 SG3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
NS' : names_same EE3 SG3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG'
 < apply secure_is to _ _ _ Sec.

Subgoal 5.2.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1 SG3
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
NS' : names_same EE3 SG3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list (is_pair is_string is_slev)) SG3
============================
 names_same EE' SG'
 < case NS.

Subgoal 5.2.2:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1 SG3 BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
NS' : names_same EE3 SG3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list (is_pair is_string is_slev)) SG3
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
============================
 names_same EE' SG'
 < apply secure_older_scopes to _ _ _ Sec.

Subgoal 5.2.2:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1 BRest B Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
NS' : names_same EE3 (Scope'::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
H8 : forall X L, lookup B X L -> lookup Scope' X L
============================
 names_same EE' SG'
 < case NS' (keep).

Subgoal 5.2.2:

Variables: SF PC SG' FE Scope EE EE' O O2 O3 S2 S1 BRest B Scope' ARest A
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
NS' : names_same (A::ARest) (Scope'::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
H8 : forall X L, lookup B X L -> lookup Scope' X L
H9 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H10 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H11 : names_same ARest BRest
============================
 names_same EE' SG'
 < apply IH1 to _ _ _ _ _ _ Ev2 Sec1.

Subgoal 5.2.2:

Variables: SF PC SG' FE Scope EE EE' O O2 O3 S2 S1 BRest B Scope' ARest A
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
NS' : names_same (A::ARest) (Scope'::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
H8 : forall X L, lookup B X L -> lookup Scope' X L
H9 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H10 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H11 : names_same ARest BRest
H12 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.3:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (declare Ty X E) SG'
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 names_same (((X, V)::Scope1)::EE2) SG'
 < case IsS.

Subgoal 5.2.3:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (declare Ty X E) SG'
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 names_same (((X, V)::Scope1)::EE2) SG'
 < Sec: case Sec.

Subgoal 5.2.3:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
============================
 names_same (((X, V)::Scope1)::EE2) (((X, public)::Scope2)::SG1)
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.3:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
NS' : names_same (Scope1::EE2) (Scope2::SG1)
============================
 names_same (((X, V)::Scope1)::EE2) (((X, public)::Scope2)::SG1)
 < R: case NS'.

Subgoal 5.2.3:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 names_same (((X, V)::Scope1)::EE2) (((X, public)::Scope2)::SG1)
 < unfold .

Subgoal 5.2.3.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 forall X1 IA,
   mem (X1, IA) ((X, V)::Scope1) -> exists IB,
     mem (X1, IB) ((X, public)::Scope2)
 < intros M.

Subgoal 5.2.3.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) ((X, V)::Scope1)
============================
 exists IB, mem (X1, IB) ((X, public)::Scope2)
 < M: case M.

Subgoal 5.2.3.1.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 exists IB, mem (X, IB) ((X, public)::Scope2)
 < search.

Subgoal 5.2.3.1.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) Scope1
============================
 exists IB, mem (X1, IB) ((X, public)::Scope2)
 < apply R to M.

Subgoal 5.2.3.1.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IA IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) Scope1
H4 : mem (X1, IB) Scope2
============================
 exists IB, mem (X1, IB) ((X, public)::Scope2)
 < search.

Subgoal 5.2.3.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 forall X1 IB,
   mem (X1, IB) ((X, public)::Scope2) -> exists IA,
     mem (X1, IA) ((X, V)::Scope1)
 < intros M.

Subgoal 5.2.3.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) ((X, public)::Scope2)
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < M: case M.

Subgoal 5.2.3.2.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 exists IA, mem (X, IA) ((X, V)::Scope1)
 < search.

Subgoal 5.2.3.2.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) Scope2
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < apply R1 to M.

Subgoal 5.2.3.2.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IB IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) Scope2
H4 : mem (X1, IA) Scope1
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < search.

Subgoal 5.2.3.3:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 names_same EE2 SG1
 < search.

Subgoal 5.2.4:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Sec : secure SF SG PC (assign X E) SG'
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.4:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Sec : secure SF SG PC (assign X E) SG'
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.4.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 E X L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.4.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 E X L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
NS' : names_same EE3 SG'
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.4.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 E X L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG'
 < NS'': apply replaceScopes_names_same to _ Ev2.

Subgoal 5.2.4.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 E X L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
============================
 names_same EE' SG'
 < NS2: apply names_same_symmetric to NS''.

Subgoal 5.2.4.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 E X L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
============================
 names_same EE' SG'
 < apply names_same_transitive to NS2 NS'.

Subgoal 5.2.4.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 E X L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
H4 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.4.2:

Variables: SF SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.4.2:

Variables: SF SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
NS' : names_same EE3 SG'
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.4.2:

Variables: SF SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG'
 < NS'': apply replaceScopes_names_same to _ Ev2.

Subgoal 5.2.4.2:

Variables: SF SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
============================
 names_same EE' SG'
 < NS2: apply names_same_symmetric to NS''.

Subgoal 5.2.4.2:

Variables: SF SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
============================
 names_same EE' SG'
 < apply names_same_transitive to NS2 NS'.

Subgoal 5.2.4.2:

Variables: SF SG' FE Scope EE EE' O V EE3 E X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
NS' : names_same EE3 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
H4 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.5:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.5:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.5.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.5.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
NS' : names_same EE3 SG'
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.5.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG'
 < NS'': apply replaceScopes_names_same to _ Ev4.

Subgoal 5.2.5.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
============================
 names_same EE' SG'
 < NS2: apply names_same_symmetric to NS''.

Subgoal 5.2.5.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
============================
 names_same EE' SG'
 < apply names_same_transitive to NS2 NS'.

Subgoal 5.2.5.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
H5 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.5.2:

Variables: SF SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.5.2:

Variables: SF SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
NS' : names_same EE3 SG'
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.5.2:

Variables: SF SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG'
 < NS'': apply replaceScopes_names_same to _ Ev4.

Subgoal 5.2.5.2:

Variables: SF SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
============================
 names_same EE' SG'
 < NS2: apply names_same_symmetric to NS''.

Subgoal 5.2.5.2:

Variables: SF SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
============================
 names_same EE' SG'
 < apply names_same_transitive to NS2 NS'.

Subgoal 5.2.5.2:

Variables: SF SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NS'' : names_same EE3 EE'
NS2 : names_same EE' EE3
H5 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.6:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.6:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG'
 < apply names_same_add_scope to NS'.

Subgoal 5.2.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
============================
 names_same EE' SG'
 < NS'': apply IH1 to _ _ _ _ _ _ Ev2 Sec2.

Subgoal 5.2.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
NS'' : names_same (Scope1::EE') SGT
============================
 names_same EE' SG'
 < case NS''.

Subgoal 5.2.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGF BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th (B::BRest)
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
H6 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope1
H8 : names_same EE' BRest
============================
 names_same EE' SG'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.2.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGF Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th (Scope'::SG')
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
H6 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
H7 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
H8 : names_same EE' SG'
H9 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.7:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.7:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG'
 < apply names_same_add_scope to NS'.

Subgoal 5.2.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
============================
 names_same EE' SG'
 < NS'': apply IH1 to _ _ _ _ _ _ Ev2 Sec3.

Subgoal 5.2.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
NS'' : names_same (Scope1::EE') SGF
============================
 names_same EE' SG'
 < case NS''.

Subgoal 5.2.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El (B::BRest)
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
H6 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope1
H8 : names_same EE' BRest
============================
 names_same EE' SG'
 < apply secure_older_scopes to _ _ _ Sec3.

Subgoal 5.2.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El (Scope'::SG')
NS' : names_same EE3 SG'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same ([]::EE3) ([]::SG')
H6 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
H7 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
H8 : names_same EE' SG'
H9 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.8:

Variables: SF SG PC SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.8:

Variables: SF SG PC SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 names_same EE' SG'
 < Sec: case Sec (keep).

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec1.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
NS' : names_same EE2 SG'
============================
 names_same EE' SG'
 < NS1: apply names_same_add_scope to NS'.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 names_same EE' SG'
 < NS'': apply IH1 to _ _ _ _ _ _ Ev2 Sec2.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS'' : names_same (Scope1::EE4) (Scope2::SG2)
============================
 names_same EE' SG'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS'' : names_same (Scope1::EE4) (Scope'::SG')
H4 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 names_same EE' SG'
 < NS+: case NS''.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 SG'
============================
 names_same EE' SG'
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 SG'
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 names_same EE' SG'
 < case IsEE4+.

Subgoal 5.2.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 SG'
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 names_same EE' SG'
 < case NS.

Subgoal 5.2.8.1:

Variables: SF FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope' BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
NS' : names_same EE2 (B::BRest)
NS1 : names_same ([]::EE2) ([]::(B::BRest))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 (B::BRest)
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
============================
 names_same EE' (B::BRest)
 < NS_: case NS1.

Subgoal 5.2.8.1:

Variables: SF FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope' BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
NS' : names_same EE2 (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 (B::BRest)
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
NS_2 : names_same EE2 (B::BRest)
============================
 names_same EE' (B::BRest)
 < case NS_2.

Subgoal 5.2.8.1:

Variables: SF FE Scope EE EE' O O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope' BRest B ARest A
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
NS' : names_same (A::ARest) (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 (B::BRest)
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H11 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
============================
 names_same EE' (B::BRest)
 < case NS+2.

Subgoal 5.2.8.1:

Variables: SF FE Scope EE EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope' BRest B ARest A ARest1 A1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
NS' : names_same (A::ARest) (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H11 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H15 : names_same ARest1 BRest
============================
 names_same EE' (B::BRest)
 < apply IH1 to _ _ _ _ _ _ Ev3 Sec.

Subgoal 5.2.8.1:

Variables: SF FE Scope EE EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope' BRest B ARest A ARest1 A1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
NS' : names_same (A::ARest) (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H11 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H15 : names_same ARest1 BRest
H16 : names_same EE' (B::BRest)
============================
 names_same EE' (B::BRest)
 < search.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope2::SG2)
============================
 names_same EE' SG'
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec1.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope2::SG2)
NS' : names_same EE2 SG'
============================
 names_same EE' SG'
 < NS1: apply names_same_add_scope to NS'.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope2::SG2)
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
============================
 names_same EE' SG'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope2::SG2)
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 names_same EE' SG'
 < NS'': apply IH1 to _ _ _ _ _ _ Ev2 Sec2.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope2 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope2::SG2)
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS'' : names_same (Scope1::EE4) (Scope2::SG2)
============================
 names_same EE' SG'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS'' : names_same (Scope1::EE4) (Scope'::SG')
H4 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 names_same EE' SG'
 < NS+: case NS''.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 SG'
============================
 names_same EE' SG'
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 SG'
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 names_same EE' SG'
 < case IsEE4+.

Subgoal 5.2.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
NS' : names_same EE2 SG'
NS1 : names_same ([]::EE2) ([]::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 SG'
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 names_same EE' SG'
 < case NS.

Subgoal 5.2.8.2:

Variables: SF FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope' BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
NS' : names_same EE2 (B::BRest)
NS1 : names_same ([]::EE2) ([]::(B::BRest))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 (B::BRest)
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
============================
 names_same EE' (B::BRest)
 < NS_: case NS1.

Subgoal 5.2.8.2:

Variables: SF FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope' BRest B
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
NS' : names_same EE2 (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 (B::BRest)
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
NS_2 : names_same EE2 (B::BRest)
============================
 names_same EE' (B::BRest)
 < case NS_2.

Subgoal 5.2.8.2:

Variables: SF FE Scope EE EE' O O2 Scope1 EE4 O3 O4 O12 Body Cond Scope' BRest B ARest A
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
NS' : names_same (A::ARest) (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS+2 : names_same EE4 (B::BRest)
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H11 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
============================
 names_same EE' (B::BRest)
 < case NS+2.

Subgoal 5.2.8.2:

Variables: SF FE Scope EE EE' O O2 Scope1 O3 O4 O12 Body Cond Scope' BRest B ARest A ARest1 A1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
NS' : names_same (A::ARest) (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H11 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H15 : names_same ARest1 BRest
============================
 names_same EE' (B::BRest)
 < apply IH1 to _ _ _ _ _ _ Ev3 Sec.

Subgoal 5.2.8.2:

Variables: SF FE Scope EE EE' O O2 Scope1 O3 O4 O12 Body Cond Scope' BRest B ARest A ARest1 A1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
NS' : names_same (A::ARest) (B::BRest)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
NS+ : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS+1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H7 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H9 : names_same EE BRest
NS_ : forall X IA, mem (X, IA) [] -> exists IB, mem (X, IB) []
NS_1 : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) []
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H11 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H15 : names_same ARest1 BRest
H16 : names_same EE' (B::BRest)
============================
 names_same EE' (B::BRest)
 < search.

Subgoal 5.2.9:

Variables: SF SG PC SG' FE Scope EE EE' O Body Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.9:

Variables: SF SG PC SG' FE Scope EE EE' O Body Cond
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.9.1:

Variables: SF SG' FE Scope EE EE' O Body Cond L Scope1 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec : level SF SG' private Cond L
Sec1 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 names_same EE' SG'
 < apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.9.1:

Variables: SF SG' FE Scope EE EE' O Body Cond L Scope1 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec : level SF SG' private Cond L
Sec1 : secure SF ([]::SG') private Body (Scope1::SG2)
H3 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.9.2:

Variables: SF SG' FE Scope EE EE' O Body Cond Scope1 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec : level SF SG' public Cond public
Sec1 : secure SF ([]::SG') public Body (Scope1::SG2)
============================
 names_same EE' SG'
 < apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.9.2:

Variables: SF SG' FE Scope EE EE' O Body Cond Scope1 SG2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec : level SF SG' public Cond public
Sec1 : secure SF ([]::SG') public Body (Scope1::SG2)
H3 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.10:

Variables: SF SG PC SG' FE Scope EE EE' O Scope1 S1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Sec : secure SF SG PC (scopeStmt S1) SG'
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.10:

Variables: SF SG PC SG' FE Scope EE EE' O Scope1 S1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Sec : secure SF SG PC (scopeStmt S1) SG'
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
============================
 names_same EE' SG'
 < apply names_same_add_scope to NS.

Subgoal 5.2.10:

Variables: SF SG PC SG' FE Scope EE EE' O Scope1 S1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Sec : secure SF SG PC (scopeStmt S1) SG'
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
H2 : names_same ([]::(Scope::EE)) ([]::SG)
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.10:

Variables: SF PC SG' FE Scope EE EE' O Scope1 S1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
H2 : names_same ([]::(Scope::EE)) ([]::SG')
Sec : secure SF ([]::SG') PC S1 (Scope2::SG')
============================
 names_same EE' SG'
 < NS': apply IH1 to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.10:

Variables: SF PC SG' FE Scope EE EE' O Scope1 S1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
H2 : names_same ([]::(Scope::EE)) ([]::SG')
Sec : secure SF ([]::SG') PC S1 (Scope2::SG')
NS' : names_same (Scope1::EE') (Scope2::SG')
============================
 names_same EE' SG'
 < case NS'.

Subgoal 5.2.10:

Variables: SF PC SG' FE Scope EE EE' O Scope1 S1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
H2 : names_same ([]::(Scope::EE)) ([]::SG')
Sec : secure SF ([]::SG') PC S1 (Scope2::SG')
H3 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
H4 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
H5 : names_same EE' SG'
============================
 names_same EE' SG'
 < apply secure_older_scopes to _ _ _ Sec.

Subgoal 5.2.10:

Variables: SF PC SG' FE Scope EE EE' O Scope1 S1 Scope'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
H2 : names_same ([]::(Scope::EE)) ([]::SG')
Sec : secure SF ([]::SG') PC S1 (Scope'::SG')
H3 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
H4 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
H5 : names_same EE' SG'
H6 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.11:

Variables: SF SG PC SG' FE Scope EE EE' O I O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.11:

Variables: SF SG PC SG' FE Scope EE EE' O I O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.11:

Variables: SF SG' FE Scope EE EE' O I O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Sec : level SF SG' public E public
============================
 names_same EE' SG'
 < apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.11:

Variables: SF SG' FE Scope EE EE' O I O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Sec : level SF SG' public E public
H2 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.12:

Variables: SF SG PC SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.12:

Variables: SF SG PC SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.12:

Variables: SF SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Sec : level SF SG' public E public
============================
 names_same EE' SG'
 < apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.12:

Variables: SF SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Sec : level SF SG' public E public
H2 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.13:

Variables: SF SG PC SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.13:

Variables: SF SG PC SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.13:

Variables: SF SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Sec : level SF SG' public E public
============================
 names_same EE' SG'
 < apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.13:

Variables: SF SG' FE Scope EE EE' O O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Sec : level SF SG' public E public
H2 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.14:

Variables: SF SG PC SG' FE Scope EE EE' O S1 O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 names_same EE' SG'
 < case IsS.

Subgoal 5.2.14:

Variables: SF SG PC SG' FE Scope EE EE' O S1 O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.14:

Variables: SF SG' FE Scope EE EE' O S1 O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Sec : level SF SG' public E public
============================
 names_same EE' SG'
 < apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.14:

Variables: SF SG' FE Scope EE EE' O S1 O2 E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Sec : level SF SG' public E public
H2 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.2.15:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt (secdecl L Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (secdecl L Ty X E) SG'
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 names_same (((X, V)::Scope1)::EE2) SG'
 < case IsS.

Subgoal 5.2.15:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty L
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (secdecl L Ty X E) SG'
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 names_same (((X, V)::Scope1)::EE2) SG'
 < Sec: case Sec.

Subgoal 5.2.15.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
============================
 names_same (((X, V)::Scope1)::EE2) (((X, private)::Scope2)::SG1)
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.15.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
NS' : names_same (Scope1::EE2) (Scope2::SG1)
============================
 names_same (((X, V)::Scope1)::EE2) (((X, private)::Scope2)::SG1)
 < R: case NS'.

Subgoal 5.2.15.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 names_same (((X, V)::Scope1)::EE2) (((X, private)::Scope2)::SG1)
 < unfold .

Subgoal 5.2.15.1.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 forall X1 IA,
   mem (X1, IA) ((X, V)::Scope1) -> exists IB,
     mem (X1, IB) ((X, private)::Scope2)
 < intros M.

Subgoal 5.2.15.1.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2 X1 IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) ((X, V)::Scope1)
============================
 exists IB, mem (X1, IB) ((X, private)::Scope2)
 < M: case M.

Subgoal 5.2.15.1.1.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 exists IB, mem (X, IB) ((X, private)::Scope2)
 < search.

Subgoal 5.2.15.1.1.2:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2 X1 IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) Scope1
============================
 exists IB, mem (X1, IB) ((X, private)::Scope2)
 < apply R to M.

Subgoal 5.2.15.1.1.2:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2 X1 IA IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) Scope1
H5 : mem (X1, IB) Scope2
============================
 exists IB, mem (X1, IB) ((X, private)::Scope2)
 < search.

Subgoal 5.2.15.1.2:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 forall X1 IB,
   mem (X1, IB) ((X, private)::Scope2) -> exists IA,
     mem (X1, IA) ((X, V)::Scope1)
 < intros M.

Subgoal 5.2.15.1.2:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2 X1 IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) ((X, private)::Scope2)
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < M: case M.

Subgoal 5.2.15.1.2.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 exists IA, mem (X, IA) ((X, V)::Scope1)
 < search.

Subgoal 5.2.15.1.2.2:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2 X1 IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) Scope2
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < apply R1 to M.

Subgoal 5.2.15.1.2.2:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2 X1 IB IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) Scope2
H5 : mem (X1, IA) Scope1
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < search.

Subgoal 5.2.15.1.3:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 names_same EE2 SG1
 < search.

Subgoal 5.2.15.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
============================
 names_same (((X, V)::Scope1)::EE2) (((X, public)::Scope2)::SG1)
 < NS': apply IH to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.2.15.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
NS' : names_same (Scope1::EE2) (Scope2::SG1)
============================
 names_same (((X, V)::Scope1)::EE2) (((X, public)::Scope2)::SG1)
 < R: case NS'.

Subgoal 5.2.15.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 names_same (((X, V)::Scope1)::EE2) (((X, public)::Scope2)::SG1)
 < unfold .

Subgoal 5.2.15.2.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 forall X1 IA,
   mem (X1, IA) ((X, V)::Scope1) -> exists IB,
     mem (X1, IB) ((X, public)::Scope2)
 < intros M.

Subgoal 5.2.15.2.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) ((X, V)::Scope1)
============================
 exists IB, mem (X1, IB) ((X, public)::Scope2)
 < M: case M.

Subgoal 5.2.15.2.1.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 exists IB, mem (X, IB) ((X, public)::Scope2)
 < search.

Subgoal 5.2.15.2.1.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) Scope1
============================
 exists IB, mem (X1, IB) ((X, public)::Scope2)
 < apply R to M.

Subgoal 5.2.15.2.1.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IA IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IA) Scope1
H5 : mem (X1, IB) Scope2
============================
 exists IB, mem (X1, IB) ((X, public)::Scope2)
 < search.

Subgoal 5.2.15.2.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 forall X1 IB,
   mem (X1, IB) ((X, public)::Scope2) -> exists IA,
     mem (X1, IA) ((X, V)::Scope1)
 < intros M.

Subgoal 5.2.15.2.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) ((X, public)::Scope2)
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < M: case M.

Subgoal 5.2.15.2.2.1:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 exists IA, mem (X, IA) ((X, V)::Scope1)
 < search.

Subgoal 5.2.15.2.2.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IB
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) Scope2
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < apply R1 to M.

Subgoal 5.2.15.2.2.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2 X1 IB IA
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
M : mem (X1, IB) Scope2
H5 : mem (X1, IA) Scope1
============================
 exists IA, mem (X1, IA) ((X, V)::Scope1)
 < search.

Subgoal 5.2.15.2.3:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
R : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope2
R1 : forall X IB, mem (X, IB) Scope2 -> exists IA, mem (X, IA) Scope1
R2 : names_same EE2 SG1
============================
 names_same EE2 SG1
 < search.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Sec : secure SF SG PC <unknown K evalStmt> SG'
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
============================
 names_same EE' SG'
 < Sec: case Sec.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
============================
 names_same EE' SG'
 < apply names_is to _ Ev1.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
============================
 names_same EE' SG'
 < apply names_is_sec to _ Sec.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 names_same EE' SG'
 < apply proj_stmt_unique to Sec1 Ev2 _ _ _ _ _.

Subgoal 5.2.16.1:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.2.16.1:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NS Ev1 Sec M.

Subgoal 5.2.16.1:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.2.16.2:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.2.16.2:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NS Ev1 Sec M.

Subgoal 5.2.16.2:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 names_same EE' SG'
 < apply proj_stmt_is to Sec1 _ _.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
============================
 names_same EE' SG'
 < NS': apply IH1 to _ _ _ _ _ _ Ev3 Sec2.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
============================
 names_same EE' SG'
 < EvP: apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 EE''
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
EvP : evalStmt FE (Scope::EE) S_P EE'' O
EvP1 : scopes_same EE' EE''
============================
 names_same EE' SG'
 < apply evalStmt_unique to _ _ _ EvP Ev3.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
EvP : evalStmt FE (Scope::EE) S_P EE_P O_P
EvP1 : scopes_same EE' EE_P
============================
 names_same EE' SG'
 < apply evalStmt_isCtx to _ _ _ Ev.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
EvP : evalStmt FE (Scope::EE) S_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 names_same EE' SG'
 < apply evalStmt_isCtx to _ _ _ EvP.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
EvP : evalStmt FE (Scope::EE) S_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_list (is_list (is_pair is_string is_value)) EE_P
============================
 names_same EE' SG'
 < SS: apply scopes_same_symm to EvP1.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
EvP : evalStmt FE (Scope::EE) S_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_list (is_list (is_pair is_string is_value)) EE_P
SS : scopes_same EE_P EE'
============================
 names_same EE' SG'
 < apply names_same_scopes_same to _ _ NS' SS.

Subgoal 5.2.16:

Variables: SF SG PC SG' FE Scope EE EE' Names S_P EE_P O_P Names1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
EvP : evalStmt FE (Scope::EE) S_P EE_P O_P
EvP1 : scopes_same EE' EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_list (is_list (is_pair is_string is_value)) EE_P
SS : scopes_same EE_P EE'
H6 : names_same EE' SG'
============================
 names_same EE' SG'
 < search.

Subgoal 5.3.1:

Variables: SF SG PC L FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalArgs FE EE' nilArgs [] EE' [] @
Lev : levelArgs SF SG PC nilArgs L
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.3.1:

Variables: SF SG PC FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalArgs FE EE' nilArgs [] EE' [] @
============================
 names_same EE' SG
 < search.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsA : is_args (consArgs E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Lev : levelArgs SF SG PC (consArgs E Rest) L
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsA.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Lev : levelArgs SF SG PC (consArgs E Rest) L
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
H3 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply IH2 to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.3.3:

Variables: SF SG PC L FE EE V EE' O
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsA : is_args <unknown K evalArgs>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
Lev : levelArgs SF SG PC <unknown K evalArgs> L
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.4.1:

Variables: SF SG PC L FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
Lev : levelRecFields SF SG PC nilRecFieldExprs L
============================
 names_same EE' SG
 < case Lev.

Subgoal 5.4.1:

Variables: SF SG PC FE EE'
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
============================
 names_same EE' SG
 < search.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 names_same EE' SG
 < case IsRF.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 names_same EE' SG
 < Lev: case Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
============================
 names_same EE' SG
 < apply IH to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
H4 : names_same EE3 SG
============================
 names_same EE' SG
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
H4 : names_same EE3 SG
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 names_same EE' SG
 < apply IH3 to _ _ _ _ _ _ Ev2 Lev1.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
H4 : names_same EE3 SG
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : names_same EE' SG
============================
 names_same EE' SG
 < search.

Subgoal 5.4.3:

Variables: SF SG PC L FE EE V EE' O
IH : forall E SF SG PC L FE EE V EE' O,
       is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> evalExpr FE EE E V EE' O * ->
       level SF SG PC E L -> names_same EE' SG
IH1 : forall S SF SG PC SG' FE Scope EE EE' O,
        is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) SG ->
        evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' -> names_same EE' SG'
IH2 : forall A SF SG PC L FE EE V EE' O,
        is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> names_same EE' SG
IH3 : forall RF SF SG PC L FE EE V EE' O,
        is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
        is_list (is_list (is_pair is_string is_slev)) SG -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
        is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
        evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> names_same EE' SG
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
Lev : levelRecFields SF SG PC <unknown K evalRecFields> L
============================
 names_same EE' SG
 < case Lev.

Proof completed.
 < Define public_equiv :
             (list (list (pair (string) slev))) ->
             (list (list (pair (string) value))) ->
             (list (list (pair (string) value))) ->
             prop by
   public_equiv [] [] [];
   public_equiv (SScope::S) (Scope1::G1) (Scope2::G2) :=
     ((forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V) /\
     (forall X V,
       lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V)) /\
     public_equiv S G1 G2.


 < Theorem no_lookup_names_same :
     forall A B X,
       is_list (is_pair is_string is_value) B -> (forall X IB,
         mem (X, IB) B -> exists (IA : value), mem (X, IA) A) -> no_lookup A X ->
       no_lookup B X.

============================
 forall A B X,
   is_list (is_pair is_string is_value) B -> (forall X IB,
     mem (X, IB) B -> exists IA, mem (X, IA) A) -> no_lookup A X -> no_lookup B X
 < induction on 1.

IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X IB,
         mem (X, IB) B -> exists IA, mem (X, IA) A) -> no_lookup A X -> no_lookup B X
============================
 forall A B X,
   is_list (is_pair is_string is_value) B @ -> (forall X IB,
     mem (X, IB) B -> exists IA, mem (X, IA) A) -> no_lookup A X -> no_lookup B X
 < intros IsB MBA NA.

Variables: A B X
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X IB,
         mem (X, IB) B -> exists IA, mem (X, IA) A) -> no_lookup A X -> no_lookup B X
IsB : is_list (is_pair is_string is_value) B @
MBA : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NA : no_lookup A X
============================
 no_lookup B X
 < IsB: case IsB.

Subgoal 1:

Variables: A X
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) [] -> exists IA, mem (X, IA) A
NA : no_lookup A X
============================
 no_lookup [] X
 < search.

Subgoal 2:

Variables: A X T H
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) (H::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB : is_pair is_string is_value H
IsB1 : is_list (is_pair is_string is_value) T *
============================
 no_lookup (H::T) X
 < case IsB.

Subgoal 2:

Variables: A X T B1 A1
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
============================
 no_lookup ((A1, B1)::T) X
 < MA: apply MBA to _ with
         X = A1.

Subgoal 2:

Variables: A X T B1 A1 IA
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
============================
 no_lookup ((A1, B1)::T) X
 < assert A1 = X -> false.

Subgoal 2.1:

Variables: A X T B1 A1 IA
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
============================
 A1 = X -> false
 < intros E.

Subgoal 2.1:

Variables: A X T B1 A1 IA
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
E : A1 = X
============================
 false
 < case E.

Subgoal 2.1:

Variables: A X T B1 IA
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X1 IB, mem (X1, IB) ((X, B1)::T) -> exists IA, mem (X1, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string X
H2 : is_value B1
MA : mem (X, IA) A
============================
 false
 < apply no_lookup_mem to NA MA.

Subgoal 2:

Variables: A X T B1 A1 IA
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
H3 : A1 = X -> false
============================
 no_lookup ((A1, B1)::T) X
 < apply IH to IsB1 _ NA.

Subgoal 2.2:

Variables: A X T B1 A1 IA
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
H3 : A1 = X -> false
============================
 forall X1 IB, mem (X1, IB) T -> exists IA, mem (X1, IA) A
 < intros M.

Subgoal 2.2:

Variables: A X T B1 A1 IA X1 IB
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
H3 : A1 = X -> false
M : mem (X1, IB) T
============================
 exists IA, mem (X1, IA) A
 < MT: assert mem (X1, IB) ((A1, B1)::T).

Subgoal 2.2:

Variables: A X T B1 A1 IA X1 IB
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
H3 : A1 = X -> false
M : mem (X1, IB) T
MT : mem (X1, IB) ((A1, B1)::T)
============================
 exists IA, mem (X1, IA) A
 < apply MBA to MT.

Subgoal 2.2:

Variables: A X T B1 A1 IA X1 IB IA1
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
H3 : A1 = X -> false
M : mem (X1, IB) T
MT : mem (X1, IB) ((A1, B1)::T)
H4 : mem (X1, IA1) A
============================
 exists IA, mem (X1, IA) A
 < search.

Subgoal 2:

Variables: A X T B1 A1 IA
IH : forall A B X,
       is_list (is_pair is_string is_value) B * -> (forall X1 IB,
         mem (X1, IB) B -> exists IA, mem (X1, IA) A) -> no_lookup A X -> no_lookup B X
MBA : forall X IB, mem (X, IB) ((A1, B1)::T) -> exists IA, mem (X, IA) A
NA : no_lookup A X
IsB1 : is_list (is_pair is_string is_value) T *
H1 : is_string A1
H2 : is_value B1
MA : mem (A1, IA) A
H3 : A1 = X -> false
H4 : no_lookup T X
============================
 no_lookup ((A1, B1)::T) X
 < search.

Proof completed.
 < Theorem public_equiv_lookupScopes :
     forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public -> lookupScopes X G1 V -> lookupScopes X G2 V.

============================
 forall S G1 G2 X V,
   public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
   lookupScopes X S public -> lookupScopes X G1 V -> lookupScopes X G2 V
 < induction on 5.

IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
============================
 forall S G1 G2 X V,
   public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
   lookupScopes X S public @ -> lookupScopes X G1 V -> lookupScopes X G2 V
 < intros PE NSA NSB IsB LSS LS.

Variables: S G1 G2 X V
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
PE : public_equiv S G1 G2
NSA : names_same G1 S
NSB : names_same G2 S
IsB : is_list (is_list (is_pair is_string is_value)) G2
LSS : lookupScopes X S public @
LS : lookupScopes X G1 V
============================
 lookupScopes X G2 V
 < LSS: case LSS.

Subgoal 1:

Variables: G1 G2 X V Rest L
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
PE : public_equiv (L::Rest) G1 G2
NSA : names_same G1 (L::Rest)
NSB : names_same G2 (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) G2
LS : lookupScopes X G1 V
LSS : lookup L X public
============================
 lookupScopes X G2 V
 < PE: case PE.

Subgoal 1:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LS : lookupScopes X (Scope1::G3) V
LSS : lookup L X public
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
============================
 lookupScopes X (Scope2::G4) V
 < LS: case LS.

Subgoal 1.1:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : lookup L X public
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
============================
 lookupScopes X (Scope2::G4) V
 < apply PE to LSS LS.

Subgoal 1.1:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : lookup L X public
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
H1 : lookup Scope2 X V
============================
 lookupScopes X (Scope2::G4) V
 < search.

Subgoal 1.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : lookup L X public
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
============================
 lookupScopes X (Scope2::G4) V
 < MS: apply lookup_mem to LSS.

Subgoal 1.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : lookup L X public
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
MS : mem (X, public) L
============================
 lookupScopes X (Scope2::G4) V
 < NSA: case NSA.

Subgoal 1.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : lookup L X public
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
MS : mem (X, public) L
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
============================
 lookupScopes X (Scope2::G4) V
 < MA: apply NSA1 to MS.

Subgoal 1.2:

Variables: X V Rest L G4 Scope2 G3 Scope1 IA
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : lookup L X public
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
MS : mem (X, public) L
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
MA : mem (X, IA) Scope1
============================
 lookupScopes X (Scope2::G4) V
 < apply no_lookup_mem to LS MA.

Subgoal 2:

Variables: G1 G2 X V Rest L
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
PE : public_equiv (L::Rest) G1 G2
NSA : names_same G1 (L::Rest)
NSB : names_same G2 (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) G2
LS : lookupScopes X G1 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
============================
 lookupScopes X G2 V
 < PE: case PE.

Subgoal 2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LS : lookupScopes X (Scope1::G3) V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
============================
 lookupScopes X (Scope2::G4) V
 < LS: case LS.

Subgoal 2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
============================
 lookupScopes X (Scope2::G4) V
 < MA: apply lookup_mem to LS.

Subgoal 2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
MA : mem (X, V) Scope1
============================
 lookupScopes X (Scope2::G4) V
 < NSA: case NSA.

Subgoal 2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
MA : mem (X, V) Scope1
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
============================
 lookupScopes X (Scope2::G4) V
 < MS: apply NSA to MA.

Subgoal 2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1 IB
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
MA : mem (X, V) Scope1
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
MS : mem (X, IB) L
============================
 lookupScopes X (Scope2::G4) V
 < NSB: case NSB.

Subgoal 2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1 IB
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
MA : mem (X, V) Scope1
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
MS : mem (X, IB) L
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
============================
 lookupScopes X (Scope2::G4) V
 < MB: apply NSB1 to MS.

Subgoal 2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1 IB IA
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : lookup Scope1 X V
MA : mem (X, V) Scope1
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
MS : mem (X, IB) L
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
MB : mem (X, IA) Scope2
============================
 lookupScopes X (Scope2::G4) V
 < apply no_lookup_mem to LSS MS.

Subgoal 2.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSA : names_same (Scope1::G3) (L::Rest)
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
============================
 lookupScopes X (Scope2::G4) V
 < NSA: case NSA.

Subgoal 2.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
NSB : names_same (Scope2::G4) (L::Rest)
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
============================
 lookupScopes X (Scope2::G4) V
 < NSB: case NSB.

Subgoal 2.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
IsB : is_list (is_list (is_pair is_string is_value)) (Scope2::G4)
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
============================
 lookupScopes X (Scope2::G4) V
 < IsB: case IsB.

Subgoal 2.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
IsB : is_list (is_pair is_string is_value) Scope2
IsB1 : is_list (is_list (is_pair is_string is_value)) G4
============================
 lookupScopes X (Scope2::G4) V
 < apply IH to PE2 _ _ _ LSS1 LS1.

Subgoal 2.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
IsB : is_list (is_pair is_string is_value) Scope2
IsB1 : is_list (is_list (is_pair is_string is_value)) G4
H1 : lookupScopes X G4 V
============================
 lookupScopes X (Scope2::G4) V
 < apply no_lookup_names_same to IsB _ LS.

Subgoal 2.2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
IsB : is_list (is_pair is_string is_value) Scope2
IsB1 : is_list (is_list (is_pair is_string is_value)) G4
H1 : lookupScopes X G4 V
============================
 forall X1 IB, mem (X1, IB) Scope2 -> exists IA, mem (X1, IA) Scope1
 < intros MB.

Subgoal 2.2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1 X1 IB
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
IsB : is_list (is_pair is_string is_value) Scope2
IsB1 : is_list (is_list (is_pair is_string is_value)) G4
H1 : lookupScopes X G4 V
MB : mem (X1, IB) Scope2
============================
 exists IA, mem (X1, IA) Scope1
 < MS: apply NSB to MB.

Subgoal 2.2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1 X1 IB IB1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
IsB : is_list (is_pair is_string is_value) Scope2
IsB1 : is_list (is_list (is_pair is_string is_value)) G4
H1 : lookupScopes X G4 V
MB : mem (X1, IB) Scope2
MS : mem (X1, IB1) L
============================
 exists IA, mem (X1, IA) Scope1
 < apply NSA1 to MS.

Subgoal 2.2.1:

Variables: X V Rest L G4 Scope2 G3 Scope1 X1 IB IB1 IA
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
IsB : is_list (is_pair is_string is_value) Scope2
IsB1 : is_list (is_list (is_pair is_string is_value)) G4
H1 : lookupScopes X G4 V
MB : mem (X1, IB) Scope2
MS : mem (X1, IB1) L
H2 : mem (X1, IA) Scope1
============================
 exists IA, mem (X1, IA) Scope1
 < search.

Subgoal 2.2:

Variables: X V Rest L G4 Scope2 G3 Scope1
IH : forall S G1 G2 X V,
       public_equiv S G1 G2 -> names_same G1 S -> names_same G2 S -> is_list (is_list (is_pair is_string is_value)) G2 ->
       lookupScopes X S public * -> lookupScopes X G1 V -> lookupScopes X G2 V
LSS : no_lookup L X
LSS1 : lookupScopes X Rest public *
PE : forall X V, lookup L X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V, lookup L X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv Rest G3 G4
LS : no_lookup Scope1 X
LS1 : lookupScopes X G3 V
NSA : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope1
NSA2 : names_same G3 Rest
NSB : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) Scope2
NSB2 : names_same G4 Rest
IsB : is_list (is_pair is_string is_value) Scope2
IsB1 : is_list (is_list (is_pair is_string is_value)) G4
H1 : lookupScopes X G4 V
H2 : no_lookup Scope2 X
============================
 lookupScopes X (Scope2::G4) V
 < search.

Proof completed.
 < Theorem public_equiv_trans :
     forall SG GA GB GC,
       public_equiv SG GA GB -> public_equiv SG GB GC -> public_equiv SG GA GC.

============================
 forall SG GA GB GC,
   public_equiv SG GA GB -> public_equiv SG GB GC -> public_equiv SG GA GC
 < induction on 1.

IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
============================
 forall SG GA GB GC,
   public_equiv SG GA GB @ -> public_equiv SG GB GC -> public_equiv SG GA GC
 < intros PAB PBC.

Variables: SG GA GB GC
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : public_equiv SG GA GB @
PBC : public_equiv SG GB GC
============================
 public_equiv SG GA GC
 < PAB: case PAB.

Subgoal 1:

Variables: GC
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PBC : public_equiv [] [] GC
============================
 public_equiv [] [] GC
 < case PBC.

Subgoal 1:

IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
============================
 public_equiv [] [] []
 < search.

Subgoal 2:

Variables: GC G2 Scope2 G1 Scope1 S SScope
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PBC : public_equiv (SScope::S) (Scope2::G2) GC
PAB : forall X V,
        lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PAB1 : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PAB2 : public_equiv S G1 G2 *
============================
 public_equiv (SScope::S) (Scope1::G1) GC
 < PBC: case PBC.

Subgoal 2:

Variables: G2 Scope2 G1 Scope1 S SScope G4 Scope4
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V,
        lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PAB1 : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PAB2 : public_equiv S G1 G2 *
PBC : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope4 X V
PBC1 : forall X V,
         lookup SScope X public -> lookup Scope4 X V -> lookup Scope2 X V
PBC2 : public_equiv S G2 G4
============================
 public_equiv (SScope::S) (Scope1::G1) (Scope4::G4)
 < rename Scope1 to AS.

Subgoal 2:

Variables: G2 Scope2 G1 AS S SScope G4 Scope4
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup Scope2 X V
PAB1 : forall X V, lookup SScope X public -> lookup Scope2 X V -> lookup AS X V
PAB2 : public_equiv S G1 G2 *
PBC : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope4 X V
PBC1 : forall X V,
         lookup SScope X public -> lookup Scope4 X V -> lookup Scope2 X V
PBC2 : public_equiv S G2 G4
============================
 public_equiv (SScope::S) (AS::G1) (Scope4::G4)
 < rename Scope2 to BS.

Subgoal 2:

Variables: G2 BS G1 AS S SScope G4 Scope4
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S G1 G2 *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup Scope4 X V
PBC1 : forall X V, lookup SScope X public -> lookup Scope4 X V -> lookup BS X V
PBC2 : public_equiv S G2 G4
============================
 public_equiv (SScope::S) (AS::G1) (Scope4::G4)
 < rename Scope4 to CS.

Subgoal 2:

Variables: G2 BS G1 AS S SScope G4 CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S G1 G2 *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S G2 G4
============================
 public_equiv (SScope::S) (AS::G1) (CS::G4)
 < rename G1 to A.

Subgoal 2:

Variables: G2 BS A AS S SScope G4 CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A G2 *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S G2 G4
============================
 public_equiv (SScope::S) (AS::A) (CS::G4)
 < rename G2 to B.

Subgoal 2:

Variables: B BS A AS S SScope G4 CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B G4
============================
 public_equiv (SScope::S) (AS::A) (CS::G4)
 < rename G4 to C.

Subgoal 2:

Variables: B BS A AS S SScope C CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
============================
 public_equiv (SScope::S) (AS::A) (CS::C)
 < unfold .

Subgoal 2.1:

Variables: B BS A AS S SScope C CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
============================
 forall X V, lookup SScope X public -> lookup AS X V -> lookup CS X V
 < intros LS LA.

Subgoal 2.1:

Variables: B BS A AS S SScope C CS X V
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
LS : lookup SScope X public
LA : lookup AS X V
============================
 lookup CS X V
 < LB: apply PAB to LS LA.

Subgoal 2.1:

Variables: B BS A AS S SScope C CS X V
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
LS : lookup SScope X public
LA : lookup AS X V
LB : lookup BS X V
============================
 lookup CS X V
 < apply PBC to LS LB.

Subgoal 2.1:

Variables: B BS A AS S SScope C CS X V
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
LS : lookup SScope X public
LA : lookup AS X V
LB : lookup BS X V
H1 : lookup CS X V
============================
 lookup CS X V
 < search.

Subgoal 2.2:

Variables: B BS A AS S SScope C CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
============================
 forall X V, lookup SScope X public -> lookup CS X V -> lookup AS X V
 < intros LS LC.

Subgoal 2.2:

Variables: B BS A AS S SScope C CS X V
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
LS : lookup SScope X public
LC : lookup CS X V
============================
 lookup AS X V
 < LB: apply PBC1 to LS LC.

Subgoal 2.2:

Variables: B BS A AS S SScope C CS X V
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
LS : lookup SScope X public
LC : lookup CS X V
LB : lookup BS X V
============================
 lookup AS X V
 < apply PAB1 to LS LB.

Subgoal 2.2:

Variables: B BS A AS S SScope C CS X V
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
LS : lookup SScope X public
LC : lookup CS X V
LB : lookup BS X V
H1 : lookup AS X V
============================
 lookup AS X V
 < search.

Subgoal 2.3:

Variables: B BS A AS S SScope C CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
============================
 public_equiv S A C
 < apply IH to PAB2 PBC2.

Subgoal 2.3:

Variables: B BS A AS S SScope C CS
IH : forall SG GA GB GC,
       public_equiv SG GA GB * -> public_equiv SG GB GC -> public_equiv SG GA GC
PAB : forall X V, lookup SScope X public -> lookup AS X V -> lookup BS X V
PAB1 : forall X V, lookup SScope X public -> lookup BS X V -> lookup AS X V
PAB2 : public_equiv S A B *
PBC : forall X V, lookup SScope X public -> lookup BS X V -> lookup CS X V
PBC1 : forall X V, lookup SScope X public -> lookup CS X V -> lookup BS X V
PBC2 : public_equiv S B C
H1 : public_equiv S A C
============================
 public_equiv S A C
 < search.

Proof completed.
 < Theorem public_equiv_refl :
     forall SG G, names_same G SG -> public_equiv SG G G.

============================
 forall SG G, names_same G SG -> public_equiv SG G G
 < induction on 1.

IH : forall SG G, names_same G SG * -> public_equiv SG G G
============================
 forall SG G, names_same G SG @ -> public_equiv SG G G
 < intros NS.

Variables: SG G
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : names_same G SG @
============================
 public_equiv SG G G
 < NS: case NS.

Subgoal 1:

IH : forall SG G, names_same G SG * -> public_equiv SG G G
============================
 public_equiv [] [] []
 < search.

Subgoal 2:

Variables: BRest B ARest A
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
NS1 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NS2 : names_same ARest BRest *
============================
 public_equiv (B::BRest) (A::ARest) (A::ARest)
 < unfold .

Subgoal 2.1:

Variables: BRest B ARest A
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
NS1 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NS2 : names_same ARest BRest *
============================
 forall X V, lookup B X public -> lookup A X V -> lookup A X V
 < intros LPub L.

Subgoal 2.1:

Variables: BRest B ARest A X V
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
NS1 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NS2 : names_same ARest BRest *
LPub : lookup B X public
L : lookup A X V
============================
 lookup A X V
 < search.

Subgoal 2.2:

Variables: BRest B ARest A
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
NS1 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NS2 : names_same ARest BRest *
============================
 forall X V, lookup B X public -> lookup A X V -> lookup A X V
 < intros LPub L.

Subgoal 2.2:

Variables: BRest B ARest A X V
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
NS1 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NS2 : names_same ARest BRest *
LPub : lookup B X public
L : lookup A X V
============================
 lookup A X V
 < search.

Subgoal 2.3:

Variables: BRest B ARest A
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
NS1 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NS2 : names_same ARest BRest *
============================
 public_equiv BRest ARest ARest
 < apply IH to NS2.

Subgoal 2.3:

Variables: BRest B ARest A
IH : forall SG G, names_same G SG * -> public_equiv SG G G
NS : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
NS1 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
NS2 : names_same ARest BRest *
H1 : public_equiv BRest ARest ARest
============================
 public_equiv BRest ARest ARest
 < search.

Proof completed.
 < Theorem public_equiv_symm :
     forall SG GA GB, public_equiv SG GA GB -> public_equiv SG GB GA.

============================
 forall SG GA GB, public_equiv SG GA GB -> public_equiv SG GB GA
 < induction on 1.

IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
============================
 forall SG GA GB, public_equiv SG GA GB @ -> public_equiv SG GB GA
 < intros PE.

Variables: SG GA GB
IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
PE : public_equiv SG GA GB @
============================
 public_equiv SG GB GA
 < PE: case PE.

Subgoal 1:

IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
============================
 public_equiv [] [] []
 < search.

Subgoal 2:

Variables: G2 Scope2 G1 Scope1 S SScope
IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
============================
 public_equiv (SScope::S) (Scope2::G2) (Scope1::G1)
 < unfold .

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope
IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
============================
 forall X V, lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
 < search.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope
IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
============================
 forall X V, lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
 < search.

Subgoal 2.3:

Variables: G2 Scope2 G1 Scope1 S SScope
IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
============================
 public_equiv S G2 G1
 < apply IH to PE2.

Subgoal 2.3:

Variables: G2 Scope2 G1 Scope1 S SScope
IH : forall SG GA GB, public_equiv SG GA GB * -> public_equiv SG GB GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
H1 : public_equiv S G2 G1
============================
 public_equiv S G2 G1
 < search.

Proof completed.
 < Theorem public_equiv_scopes_same_snd :
     forall SG G GA GB,
       public_equiv SG G GB -> scopes_same GA GB -> public_equiv SG G GA.

============================
 forall SG G GA GB,
   public_equiv SG G GB -> scopes_same GA GB -> public_equiv SG G GA
 < induction on 1.

IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
============================
 forall SG G GA GB,
   public_equiv SG G GB @ -> scopes_same GA GB -> public_equiv SG G GA
 < intros PE SS.

Variables: SG G GA GB
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : public_equiv SG G GB @
SS : scopes_same GA GB
============================
 public_equiv SG G GA
 < PE: case PE.

Subgoal 1:

Variables: GA
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
SS : scopes_same GA []
============================
 public_equiv [] [] GA
 < case SS.

Subgoal 1:

IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
============================
 public_equiv [] [] []
 < search.

Subgoal 2:

Variables: GA G2 Scope2 G1 Scope1 S SScope
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
SS : scopes_same GA (Scope2::G2)
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
============================
 public_equiv (SScope::S) (Scope1::G1) GA
 < SS: case SS.

Subgoal 2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
============================
 public_equiv (SScope::S) (Scope1::G1) (A::ARest)
 < unfold .

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
============================
 forall X V, lookup SScope X public -> lookup Scope1 X V -> lookup A X V
 < intros LS L1.

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
LS : lookup SScope X public
L1 : lookup Scope1 X V
============================
 lookup A X V
 < L2: apply PE to LS L1.

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
LS : lookup SScope X public
L1 : lookup Scope1 X V
L2 : lookup Scope2 X V
============================
 lookup A X V
 < apply SS1 to L2.

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
LS : lookup SScope X public
L1 : lookup Scope1 X V
L2 : lookup Scope2 X V
H1 : lookup A X V
============================
 lookup A X V
 < search.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
============================
 forall X V, lookup SScope X public -> lookup A X V -> lookup Scope1 X V
 < intros LS L2.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
LS : lookup SScope X public
L2 : lookup A X V
============================
 lookup Scope1 X V
 < LS2: apply SS to L2.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
LS : lookup SScope X public
L2 : lookup A X V
LS2 : lookup Scope2 X V
============================
 lookup Scope1 X V
 < apply PE1 to LS LS2.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
LS : lookup SScope X public
L2 : lookup A X V
LS2 : lookup Scope2 X V
H1 : lookup Scope1 X V
============================
 lookup Scope1 X V
 < search.

Subgoal 2.3:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
============================
 public_equiv S G1 ARest
 < apply IH to PE2 _.

Subgoal 2.3:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG G GB * -> scopes_same GA GB -> public_equiv SG G GA
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope2 X V
SS1 : forall X V, lookup Scope2 X V -> lookup A X V
SS2 : scopes_same ARest G2
H1 : public_equiv S G1 ARest
============================
 public_equiv S G1 ARest
 < search.

Proof completed.
 < Theorem public_equiv_scopes_same_fst :
     forall SG G GA GB,
       public_equiv SG GB G -> scopes_same GA GB -> public_equiv SG GA G.

============================
 forall SG G GA GB,
   public_equiv SG GB G -> scopes_same GA GB -> public_equiv SG GA G
 < induction on 1.

IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
============================
 forall SG G GA GB,
   public_equiv SG GB G @ -> scopes_same GA GB -> public_equiv SG GA G
 < intros PE SS.

Variables: SG G GA GB
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : public_equiv SG GB G @
SS : scopes_same GA GB
============================
 public_equiv SG GA G
 < PE: case PE.

Subgoal 1:

Variables: GA
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
SS : scopes_same GA []
============================
 public_equiv [] GA []
 < case SS.

Subgoal 1:

IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
============================
 public_equiv [] [] []
 < search.

Subgoal 2:

Variables: GA G2 Scope2 G1 Scope1 S SScope
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
SS : scopes_same GA (Scope1::G1)
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
============================
 public_equiv (SScope::S) GA (Scope2::G2)
 < SS: case SS.

Subgoal 2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
============================
 public_equiv (SScope::S) (A::ARest) (Scope2::G2)
 < unfold .

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
============================
 forall X V, lookup SScope X public -> lookup A X V -> lookup Scope2 X V
 < intros LS L1.

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
LS : lookup SScope X public
L1 : lookup A X V
============================
 lookup Scope2 X V
 < L: apply SS to L1.

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
LS : lookup SScope X public
L1 : lookup A X V
L : lookup Scope1 X V
============================
 lookup Scope2 X V
 < apply PE to LS L.

Subgoal 2.1:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
LS : lookup SScope X public
L1 : lookup A X V
L : lookup Scope1 X V
H1 : lookup Scope2 X V
============================
 lookup Scope2 X V
 < search.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
============================
 forall X V, lookup SScope X public -> lookup Scope2 X V -> lookup A X V
 < intros LS L2.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
LS : lookup SScope X public
L2 : lookup Scope2 X V
============================
 lookup A X V
 < L1: apply PE1 to LS L2.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
LS : lookup SScope X public
L2 : lookup Scope2 X V
L1 : lookup Scope1 X V
============================
 lookup A X V
 < apply SS1 to L1.

Subgoal 2.2:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A X V
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
LS : lookup SScope X public
L2 : lookup Scope2 X V
L1 : lookup Scope1 X V
H1 : lookup A X V
============================
 lookup A X V
 < search.

Subgoal 2.3:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
============================
 public_equiv S ARest G2
 < apply IH to PE2 _.

Subgoal 2.3:

Variables: G2 Scope2 G1 Scope1 S SScope ARest A
IH : forall SG G GA GB,
       public_equiv SG GB G * -> scopes_same GA GB -> public_equiv SG GA G
PE : forall X V,
       lookup SScope X public -> lookup Scope1 X V -> lookup Scope2 X V
PE1 : forall X V,
        lookup SScope X public -> lookup Scope2 X V -> lookup Scope1 X V
PE2 : public_equiv S G1 G2 *
SS : forall X V, lookup A X V -> lookup Scope1 X V
SS1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2 : scopes_same ARest G1
H1 : public_equiv S ARest G2
============================
 public_equiv S ARest G2
 < search.

Proof completed.
 < Theorem public_equiv_add_scope :
     forall SG GA GB,
       public_equiv SG GA GB -> public_equiv ([]::SG) ([]::GA) ([]::GB).

============================
 forall SG GA GB,
   public_equiv SG GA GB -> public_equiv ([]::SG) ([]::GA) ([]::GB)
 < intros PE.

Variables: SG GA GB
PE : public_equiv SG GA GB
============================
 public_equiv ([]::SG) ([]::GA) ([]::GB)
 < unfold .

Subgoal 1:

Variables: SG GA GB
PE : public_equiv SG GA GB
============================
 forall X V, lookup [] X public -> lookup [] X V -> lookup [] X V
 < intros L.

Subgoal 1:

Variables: SG GA GB X V
PE : public_equiv SG GA GB
L : lookup [] X public
H1 : lookup [] X V
============================
 lookup [] X V
 < case L.

Subgoal 2:

Variables: SG GA GB
PE : public_equiv SG GA GB
============================
 forall X V, lookup [] X public -> lookup [] X V -> lookup [] X V
 < intros L.

Subgoal 2:

Variables: SG GA GB X V
PE : public_equiv SG GA GB
L : lookup [] X public
H1 : lookup [] X V
============================
 lookup [] X V
 < case L.

Subgoal 3:

Variables: SG GA GB
PE : public_equiv SG GA GB
============================
 public_equiv SG GA GB
 < search.

Proof completed.
 < Theorem public_equiv_add_public :
     forall SS SG AS GA BS GB X V,
       public_equiv (SS::SG) (AS::GA) (BS::GB) -> public_equiv (((X, public)::SS)::SG) (((X, V)::AS)::GA) (((X, V)::BS)::GB).

============================
 forall SS SG AS GA BS GB X V,
   public_equiv (SS::SG) (AS::GA) (BS::GB) -> public_equiv (((X, public)::SS)::SG) (((X, V)::AS)::GA) (((X, V)::BS)::GB)
 < intros PE.

Variables: SS SG AS GA BS GB X V
PE : public_equiv (SS::SG) (AS::GA) (BS::GB)
============================
 public_equiv (((X, public)::SS)::SG) (((X, V)::AS)::GA) (((X, V)::BS)::GB)
 < PE: case PE.

Variables: SS SG AS GA BS GB X V
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 public_equiv (((X, public)::SS)::SG) (((X, V)::AS)::GA) (((X, V)::BS)::GB)
 < unfold .

Subgoal 1:

Variables: SS SG AS GA BS GB X V
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 forall X1 V1,
   lookup ((X, public)::SS) X1 public -> lookup ((X, V)::AS) X1 V1 -> lookup ((X, V)::BS) X1 V1
 < intros LS LA.

Subgoal 1:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : lookup ((X, public)::SS) X1 public
LA : lookup ((X, V)::AS) X1 V1
============================
 lookup ((X, V)::BS) X1 V1
 < LS: case LS.

Subgoal 1.1:

Variables: SS SG AS GA BS GB V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LA : lookup ((X1, V)::AS) X1 V1
============================
 lookup ((X1, V)::BS) X1 V1
 < LA: case LA.

Subgoal 1.1.1:

Variables: SS SG AS GA BS GB X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 lookup ((X1, V1)::BS) X1 V1
 < search.

Subgoal 1.1.2:

Variables: SS SG AS GA BS GB V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LA : X1 = X1 -> false
LA1 : lookup AS X1 V1
============================
 lookup ((X1, V)::BS) X1 V1
 < apply LA to _.

Subgoal 1.2:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LA : lookup ((X, V)::AS) X1 V1
LS : X = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X, V)::BS) X1 V1
 < LA: case LA.

Subgoal 1.2.1:

Variables: SS SG AS GA BS GB X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X1 = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X1, V1)::BS) X1 V1
 < apply LS to _.

Subgoal 1.2.2:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LA : X = X1 -> false
LA1 : lookup AS X1 V1
============================
 lookup ((X, V)::BS) X1 V1
 < apply PE to LS1 LA1.

Subgoal 1.2.2:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LA : X = X1 -> false
LA1 : lookup AS X1 V1
H1 : lookup BS X1 V1
============================
 lookup ((X, V)::BS) X1 V1
 < search.

Subgoal 2:

Variables: SS SG AS GA BS GB X V
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 forall X1 V1,
   lookup ((X, public)::SS) X1 public -> lookup ((X, V)::BS) X1 V1 -> lookup ((X, V)::AS) X1 V1
 < intros LS LB.

Subgoal 2:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : lookup ((X, public)::SS) X1 public
LB : lookup ((X, V)::BS) X1 V1
============================
 lookup ((X, V)::AS) X1 V1
 < LS: case LS.

Subgoal 2.1:

Variables: SS SG AS GA BS GB V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LB : lookup ((X1, V)::BS) X1 V1
============================
 lookup ((X1, V)::AS) X1 V1
 < LB: case LB.

Subgoal 2.1.1:

Variables: SS SG AS GA BS GB X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 lookup ((X1, V1)::AS) X1 V1
 < search.

Subgoal 2.1.2:

Variables: SS SG AS GA BS GB V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LB : X1 = X1 -> false
LB1 : lookup BS X1 V1
============================
 lookup ((X1, V)::AS) X1 V1
 < apply LB to _.

Subgoal 2.2:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LB : lookup ((X, V)::BS) X1 V1
LS : X = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X, V)::AS) X1 V1
 < LB: case LB.

Subgoal 2.2.1:

Variables: SS SG AS GA BS GB X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X1 = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X1, V1)::AS) X1 V1
 < apply LS to _.

Subgoal 2.2.2:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LB : X = X1 -> false
LB1 : lookup BS X1 V1
============================
 lookup ((X, V)::AS) X1 V1
 < apply PE1 to LS1 LB1.

Subgoal 2.2.2:

Variables: SS SG AS GA BS GB X V X1 V1
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LB : X = X1 -> false
LB1 : lookup BS X1 V1
H1 : lookup AS X1 V1
============================
 lookup ((X, V)::AS) X1 V1
 < search.

Subgoal 3:

Variables: SS SG AS GA BS GB X V
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 public_equiv SG GA GB
 < search.

Proof completed.
 < Theorem public_equiv_add_other :
     forall SS SG AS GA BS GB X L VA VB,
       public_equiv (SS::SG) (AS::GA) (BS::GB) -> (L = public -> false) -> public_equiv (((X, L)::SS)::SG) (((X, VA)::AS)::GA) (((X, VB)::BS)::GB).

============================
 forall SS SG AS GA BS GB X L VA VB,
   public_equiv (SS::SG) (AS::GA) (BS::GB) -> (L = public -> false) -> public_equiv (((X, L)::SS)::SG) (((X, VA)::AS)::GA) (((X, VB)::BS)::GB)
 < intros PE NEq.

Variables: SS SG AS GA BS GB X L VA VB
PE : public_equiv (SS::SG) (AS::GA) (BS::GB)
NEq : L = public -> false
============================
 public_equiv (((X, L)::SS)::SG) (((X, VA)::AS)::GA) (((X, VB)::BS)::GB)
 < PE: case PE.

Variables: SS SG AS GA BS GB X L VA VB
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 public_equiv (((X, L)::SS)::SG) (((X, VA)::AS)::GA) (((X, VB)::BS)::GB)
 < unfold .

Subgoal 1:

Variables: SS SG AS GA BS GB X L VA VB
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 forall X1 V,
   lookup ((X, L)::SS) X1 public -> lookup ((X, VA)::AS) X1 V -> lookup ((X, VB)::BS) X1 V
 < intros LS LA.

Subgoal 1:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : lookup ((X, L)::SS) X1 public
LA : lookup ((X, VA)::AS) X1 V
============================
 lookup ((X, VB)::BS) X1 V
 < LS: case LS.

Subgoal 1.1:

Variables: SS SG AS GA BS GB VA VB X1 V
NEq : public = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LA : lookup ((X1, VA)::AS) X1 V
============================
 lookup ((X1, VB)::BS) X1 V
 < apply NEq to _.

Subgoal 1.2:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LA : lookup ((X, VA)::AS) X1 V
LS : X = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X, VB)::BS) X1 V
 < LA: case LA.

Subgoal 1.2.1:

Variables: SS SG AS GA BS GB L VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X1 = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X1, VB)::BS) X1 V
 < apply LS to _.

Subgoal 1.2.2:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LA : X = X1 -> false
LA1 : lookup AS X1 V
============================
 lookup ((X, VB)::BS) X1 V
 < apply PE to LS1 LA1.

Subgoal 1.2.2:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LA : X = X1 -> false
LA1 : lookup AS X1 V
H1 : lookup BS X1 V
============================
 lookup ((X, VB)::BS) X1 V
 < search.

Subgoal 2:

Variables: SS SG AS GA BS GB X L VA VB
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 forall X1 V,
   lookup ((X, L)::SS) X1 public -> lookup ((X, VB)::BS) X1 V -> lookup ((X, VA)::AS) X1 V
 < intros LS LB.

Subgoal 2:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : lookup ((X, L)::SS) X1 public
LB : lookup ((X, VB)::BS) X1 V
============================
 lookup ((X, VA)::AS) X1 V
 < LS: case LS.

Subgoal 2.1:

Variables: SS SG AS GA BS GB VA VB X1 V
NEq : public = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LB : lookup ((X1, VB)::BS) X1 V
============================
 lookup ((X1, VA)::AS) X1 V
 < apply NEq to _.

Subgoal 2.2:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LB : lookup ((X, VB)::BS) X1 V
LS : X = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X, VA)::AS) X1 V
 < LB: case LB.

Subgoal 2.2.1:

Variables: SS SG AS GA BS GB L VA X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X1 = X1 -> false
LS1 : lookup SS X1 public
============================
 lookup ((X1, VA)::AS) X1 V
 < apply LS to _.

Subgoal 2.2.2:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LB : X = X1 -> false
LB1 : lookup BS X1 V
============================
 lookup ((X, VA)::AS) X1 V
 < apply PE1 to LS1 LB1.

Subgoal 2.2.2:

Variables: SS SG AS GA BS GB X L VA VB X1 V
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
LS : X = X1 -> false
LS1 : lookup SS X1 public
LB : X = X1 -> false
LB1 : lookup BS X1 V
H1 : lookup AS X1 V
============================
 lookup ((X, VA)::AS) X1 V
 < search.

Subgoal 3:

Variables: SS SG AS GA BS GB X L VA VB
NEq : L = public -> false
PE : forall X V, lookup SS X public -> lookup AS X V -> lookup BS X V
PE1 : forall X V, lookup SS X public -> lookup BS X V -> lookup AS X V
PE2 : public_equiv SG GA GB
============================
 public_equiv SG GA GB
 < search.

Proof completed.
 < Theorem remove_all_eq_or_mem  [Key, Item] :
     forall L L' (X : Key) (Y : Key) (V : Item),
       remove_all L X L' -> mem (Y, V) L -> Y = X \/ mem (Y, V) L'.

============================
 forall L L' X Y V, remove_all L X L' -> mem (Y, V) L -> Y = X \/ mem (Y, V) L'
 < induction on 2.

IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
============================
 forall L L' X Y V,
   remove_all L X L' -> mem (Y, V) L @ -> Y = X \/ mem (Y, V) L'
 < intros RA M.

Variables: L L' X Y V
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
RA : remove_all L X L'
M : mem (Y, V) L @
============================
 Y = X \/ mem (Y, V) L'
 < M: case M.

Subgoal 1:

Variables: L' X Y V Rest
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
RA : remove_all ((Y, V)::Rest) X L'
============================
 Y = X \/ mem (Y, V) L'
 < RA: case RA.

Subgoal 1.1:

Variables: L' X V Rest
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
RA : remove_all Rest X L'
============================
 X = X \/ mem (X, V) L'
 < search.

Subgoal 1.2:

Variables: X Y V Rest R
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
RA : Y = X -> false
RA1 : remove_all Rest X R
============================
 Y = X \/ mem (Y, V) ((Y, V)::R)
 < search.

Subgoal 2:

Variables: L' X Y V Rest I
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
RA : remove_all (I::Rest) X L'
M : mem (Y, V) Rest *
============================
 Y = X \/ mem (Y, V) L'
 < RA: case RA.

Subgoal 2.1:

Variables: L' X Y V Rest Item
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (Y, V) Rest *
RA : remove_all Rest X L'
============================
 Y = X \/ mem (Y, V) L'
 < Or: apply IH to RA M.

Subgoal 2.1:

Variables: L' X Y V Rest Item
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (Y, V) Rest *
RA : remove_all Rest X L'
Or : Y = X \/ mem (Y, V) L'
============================
 Y = X \/ mem (Y, V) L'
 < E: case Or.

Subgoal 2.1.1:

Variables: L' X V Rest Item
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (X, V) Rest *
RA : remove_all Rest X L'
============================
 X = X \/ mem (X, V) L'
 < search.

Subgoal 2.1.2:

Variables: L' X Y V Rest Item
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (Y, V) Rest *
RA : remove_all Rest X L'
E : mem (Y, V) L'
============================
 Y = X \/ mem (Y, V) L'
 < search.

Subgoal 2.2:

Variables: X Y V Rest R Item K
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (Y, V) Rest *
RA : K = X -> false
RA1 : remove_all Rest X R
============================
 Y = X \/ mem (Y, V) ((K, Item)::R)
 < Or: apply IH to RA1 M.

Subgoal 2.2:

Variables: X Y V Rest R Item K
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (Y, V) Rest *
RA : K = X -> false
RA1 : remove_all Rest X R
Or : Y = X \/ mem (Y, V) R
============================
 Y = X \/ mem (Y, V) ((K, Item)::R)
 < E: case Or.

Subgoal 2.2.1:

Variables: X V Rest R Item K
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (X, V) Rest *
RA : K = X -> false
RA1 : remove_all Rest X R
============================
 X = X \/ mem (X, V) ((K, Item)::R)
 < search.

Subgoal 2.2.2:

Variables: X Y V Rest R Item K
IH : forall L L' X Y V,
       remove_all L X L' -> mem (Y, V) L * -> Y = X \/ mem (Y, V) L'
M : mem (Y, V) Rest *
RA : K = X -> false
RA1 : remove_all Rest X R
E : mem (Y, V) R
============================
 Y = X \/ mem (Y, V) ((K, Item)::R)
 < search.

Proof completed.
 < Theorem public_equiv_replaceScopes_public :
     forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB.

============================
 forall SG GA GB X V RA RB,
   public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public ->
   replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
 < induction on 4.

IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
============================
 forall SG GA GB X V RA RB,
   public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public @ ->
   replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
 < intros PE NSA NSB LS RA RB.

Variables: SG GA GB X V RA RB
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv SG GA GB
NSA : names_same GA SG
NSB : names_same GB SG
LS : lookupScopes X SG public @
RA : replaceScopes X V GA RA
RB : replaceScopes X V GB RB
============================
 public_equiv SG RA RB
 < LS: case LS.

Subgoal 1:

Variables: GA GB X V RA RB Rest L
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) GA GB
NSA : names_same GA (L::Rest)
NSB : names_same GB (L::Rest)
RA : replaceScopes X V GA RA
RB : replaceScopes X V GB RB
LS : lookup L X public
============================
 public_equiv (L::Rest) RA RB
 < RA: case RA.

Subgoal 1.1:

Variables: GB X V RB Rest L I Rest1 LRemain L1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) RB
 < RB: case RB.

Subgoal 1.1.1:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) (((X, V)::LRemain1)::Rest2)
 < PE: case PE.

Subgoal 1.1.1:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) (((X, V)::LRemain1)::Rest2)
 < unfold .

Subgoal 1.1.1.1:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 forall X1 V1,
   lookup L X1 public -> lookup ((X, V)::LRemain) X1 V1 -> lookup ((X, V)::LRemain1) X1 V1
 < intros LS LA.

Subgoal 1.1.1.1:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LA : lookup ((X, V)::LRemain) X1 V1
============================
 lookup ((X, V)::LRemain1) X1 V1
 < LA: case LA.

Subgoal 1.1.1.1.1:

Variables: Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X1 public
RA : mem (X1, I) L1
RA1 : remove_all L1 X1 LRemain
RB : mem (X1, I1) L2
RB1 : remove_all L2 X1 LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
============================
 lookup ((X1, V1)::LRemain1) X1 V1
 < search.

Subgoal 1.1.1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V1
============================
 lookup ((X, V)::LRemain1) X1 V1
 < LA': apply remove_all_lookup_other to RA1 LA1 _.

Subgoal 1.1.1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V1
LA' : lookup L1 X1 V1
============================
 lookup ((X, V)::LRemain1) X1 V1
 < LB': apply PE to _ LA'.

Subgoal 1.1.1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V1
LA' : lookup L1 X1 V1
LB' : lookup L2 X1 V1
============================
 lookup ((X, V)::LRemain1) X1 V1
 < apply remove_all_lookup_other_back to RB1 LB' _.

Subgoal 1.1.1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V1
LA' : lookup L1 X1 V1
LB' : lookup L2 X1 V1
H1 : lookup LRemain1 X1 V1
============================
 lookup ((X, V)::LRemain1) X1 V1
 < search.

Subgoal 1.1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 forall X1 V1,
   lookup L X1 public -> lookup ((X, V)::LRemain1) X1 V1 -> lookup ((X, V)::LRemain) X1 V1
 < intros LS LB.

Subgoal 1.1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LB : lookup ((X, V)::LRemain1) X1 V1
============================
 lookup ((X, V)::LRemain) X1 V1
 < LB: case LB.

Subgoal 1.1.1.2.1:

Variables: Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X1 public
RA : mem (X1, I) L1
RA1 : remove_all L1 X1 LRemain
RB : mem (X1, I1) L2
RB1 : remove_all L2 X1 LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
============================
 lookup ((X1, V1)::LRemain) X1 V1
 < search.

Subgoal 1.1.1.2.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V1
============================
 lookup ((X, V)::LRemain) X1 V1
 < LB': apply remove_all_lookup_other to RB1 LB1 _.

Subgoal 1.1.1.2.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V1
LB' : lookup L2 X1 V1
============================
 lookup ((X, V)::LRemain) X1 V1
 < LA': apply PE1 to _ LB'.

Subgoal 1.1.1.2.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V1
LB' : lookup L2 X1 V1
LA' : lookup L1 X1 V1
============================
 lookup ((X, V)::LRemain) X1 V1
 < apply remove_all_lookup_other_back to RA1 LA' _.

Subgoal 1.1.1.2.2:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2 X1 V1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
LS1 : lookup L X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V1
LB' : lookup L2 X1 V1
LA' : lookup L1 X1 V1
H1 : lookup LRemain X1 V1
============================
 lookup ((X, V)::LRemain) X1 V1
 < search.

Subgoal 1.1.1.3:

Variables: X V Rest L I Rest1 LRemain L1 I1 Rest2 LRemain1 L2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : mem (X, I1) L2
RB1 : remove_all L2 X LRemain1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 public_equiv Rest Rest1 Rest2
 < search.

Subgoal 1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 New L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) (L2::New)
 < NSA: case NSA.

Subgoal 1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 New L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
NSB : names_same (L2::Rest2) (L::Rest)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) (L2::New)
 < NSB: case NSB.

Subgoal 1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 New L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
NSB : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L2
NSB2 : names_same Rest2 Rest
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) (L2::New)
 < MS: apply NSA to RA.

Subgoal 1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 New L2 Rest2 IB
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
NSB : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L2
NSB2 : names_same Rest2 Rest
MS : mem (X, IB) L
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) (L2::New)
 < MB: apply NSB1 to MS.

Subgoal 1.1.2:

Variables: X V Rest L I Rest1 LRemain L1 New L2 Rest2 IB IA
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
LS : lookup L X public
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
NSB : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L2
NSB2 : names_same Rest2 Rest
MS : mem (X, IB) L
MB : mem (X, IA) L2
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) (L2::New)
 < apply no_lookup_mem to RB MB.

Subgoal 1.2:

Variables: GB X V RB Rest L New L1 Rest1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : lookup L X public
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
============================
 public_equiv (L::Rest) (L1::New) RB
 < NSA: case NSA.

Subgoal 1.2:

Variables: GB X V RB Rest L New L1 Rest1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : lookup L X public
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
============================
 public_equiv (L::Rest) (L1::New) RB
 < MS: apply lookup_mem to LS.

Subgoal 1.2:

Variables: GB X V RB Rest L New L1 Rest1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : lookup L X public
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
MS : mem (X, public) L
============================
 public_equiv (L::Rest) (L1::New) RB
 < MA: apply NSA1 to MS.

Subgoal 1.2:

Variables: GB X V RB Rest L New L1 Rest1 IA
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : lookup L X public
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
MS : mem (X, public) L
MA : mem (X, IA) L1
============================
 public_equiv (L::Rest) (L1::New) RB
 < apply no_lookup_mem to RA MA.

Subgoal 2:

Variables: GA GB X V RA RB Rest L
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) GA GB
NSA : names_same GA (L::Rest)
NSB : names_same GB (L::Rest)
RA : replaceScopes X V GA RA
RB : replaceScopes X V GB RB
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
============================
 public_equiv (L::Rest) RA RB
 < RA: case RA.

Subgoal 2.1:

Variables: GB X V RB Rest L I Rest1 LRemain L1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) RB
 < NSA: case NSA.

Subgoal 2.1:

Variables: GB X V RB Rest L I Rest1 LRemain L1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) RB
 < MS: apply NSA to RA.

Subgoal 2.1:

Variables: GB X V RB Rest L I Rest1 LRemain L1 IB
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : mem (X, I) L1
RA1 : remove_all L1 X LRemain
NSA : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
NSA1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
NSA2 : names_same Rest1 Rest
MS : mem (X, IB) L
============================
 public_equiv (L::Rest) (((X, V)::LRemain)::Rest1) RB
 < apply no_lookup_mem to LS MS.

Subgoal 2.2:

Variables: GB X V RB Rest L New L1 Rest1
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) GB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same GB (L::Rest)
RB : replaceScopes X V GB RB
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
============================
 public_equiv (L::Rest) (L1::New) RB
 < RB: case RB.

Subgoal 2.2.1:

Variables: X V Rest L New L1 Rest1 I Rest2 LRemain L2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : mem (X, I) L2
RB1 : remove_all L2 X LRemain
============================
 public_equiv (L::Rest) (L1::New) (((X, V)::LRemain)::Rest2)
 < NSB: case NSB.

Subgoal 2.2.1:

Variables: X V Rest L New L1 Rest1 I Rest2 LRemain L2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
NSA : names_same (L1::Rest1) (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : mem (X, I) L2
RB1 : remove_all L2 X LRemain
NSB : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L2
NSB2 : names_same Rest2 Rest
============================
 public_equiv (L::Rest) (L1::New) (((X, V)::LRemain)::Rest2)
 < MS: apply NSB to RB.

Subgoal 2.2.1:

Variables: X V Rest L New L1 Rest1 I Rest2 LRemain L2 IB
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
NSA : names_same (L1::Rest1) (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : mem (X, I) L2
RB1 : remove_all L2 X LRemain
NSB : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L
NSB1 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L2
NSB2 : names_same Rest2 Rest
MS : mem (X, IB) L
============================
 public_equiv (L::Rest) (L1::New) (((X, V)::LRemain)::Rest2)
 < apply no_lookup_mem to LS MS.

Subgoal 2.2.2:

Variables: X V Rest L New L1 Rest1 New1 L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
PE : public_equiv (L::Rest) (L1::Rest1) (L2::Rest2)
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New1
============================
 public_equiv (L::Rest) (L1::New) (L2::New1)
 < PE: case PE.

Subgoal 2.2.2:

Variables: X V Rest L New L1 Rest1 New1 L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSA : names_same (L1::Rest1) (L::Rest)
NSB : names_same (L2::Rest2) (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 public_equiv (L::Rest) (L1::New) (L2::New1)
 < case NSA.

Subgoal 2.2.2:

Variables: X V Rest L New L1 Rest1 New1 L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
NSB : names_same (L2::Rest2) (L::Rest)
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
H1 : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
H2 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
H3 : names_same Rest1 Rest
============================
 public_equiv (L::Rest) (L1::New) (L2::New1)
 < case NSB.

Subgoal 2.2.2:

Variables: X V Rest L New L1 Rest1 New1 L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
H1 : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
H2 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
H3 : names_same Rest1 Rest
H4 : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L
H5 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L2
H6 : names_same Rest2 Rest
============================
 public_equiv (L::Rest) (L1::New) (L2::New1)
 < apply IH to PE2 _ _ LS1 RA1 RB1.

Subgoal 2.2.2:

Variables: X V Rest L New L1 Rest1 New1 L2 Rest2
IH : forall SG GA GB X V RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG public * ->
       replaceScopes X V GA RA -> replaceScopes X V GB RB -> public_equiv SG RA RB
LS : no_lookup L X
LS1 : lookupScopes X Rest public *
RA : no_lookup L1 X
RA1 : replaceScopes X V Rest1 New
RB : no_lookup L2 X
RB1 : replaceScopes X V Rest2 New1
PE : forall X V, lookup L X public -> lookup L1 X V -> lookup L2 X V
PE1 : forall X V, lookup L X public -> lookup L2 X V -> lookup L1 X V
PE2 : public_equiv Rest Rest1 Rest2
H1 : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L
H2 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L1
H3 : names_same Rest1 Rest
H4 : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L
H5 : forall X IB, mem (X, IB) L -> exists IA, mem (X, IA) L2
H6 : names_same Rest2 Rest
H7 : public_equiv Rest New New1
============================
 public_equiv (L::Rest) (L1::New) (L2::New1)
 < search.

Proof completed.
 < Theorem public_equiv_replaceScopes_other :
     forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB.

============================
 forall SG GA GB X L VA VB RA RB,
   public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L ->
   (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
   public_equiv SG RA RB
 < induction on 4.

IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
============================
 forall SG GA GB X L VA VB RA RB,
   public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L @ ->
   (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
   public_equiv SG RA RB
 < intros PE NSA NSB LS NEq RA RB.

Variables: SG GA GB X L VA VB RA RB
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv SG GA GB
NSA : names_same GA SG
NSB : names_same GB SG
LS : lookupScopes X SG L @
NEq : L = public -> false
RA : replaceScopes X VA GA RA
RB : replaceScopes X VB GB RB
============================
 public_equiv SG RA RB
 < LS: case LS.

Subgoal 1:

Variables: GA GB X L VA VB RA RB Rest L1
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) GA GB
NSA : names_same GA (L1::Rest)
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RA : replaceScopes X VA GA RA
RB : replaceScopes X VB GB RB
LS : lookup L1 X L
============================
 public_equiv (L1::Rest) RA RB
 < RA: case RA.

Subgoal 1.1:

Variables: GB X L VA VB RB Rest L1 I Rest1 LRemain L2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) RB
 < RB: case RB.

Subgoal 1.1.1:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) (((X, VB)::LRemain1)::Rest2)
 < PE: case PE.

Subgoal 1.1.1:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) (((X, VB)::LRemain1)::Rest2)
 < unfold .

Subgoal 1.1.1.1:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 forall X1 V,
   lookup L1 X1 public -> lookup ((X, VA)::LRemain) X1 V -> lookup ((X, VB)::LRemain1) X1 V
 < intros LS' LA.

Subgoal 1.1.1.1:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LA : lookup ((X, VA)::LRemain) X1 V
============================
 lookup ((X, VB)::LRemain1) X1 V
 < LA: case LA.

Subgoal 1.1.1.1.1:

Variables: L VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X1 L
RA : mem (X1, I) L2
RA1 : remove_all L2 X1 LRemain
RB : mem (X1, I1) L3
RB1 : remove_all L3 X1 LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
============================
 lookup ((X1, VB)::LRemain1) X1 V
 < apply lookup_unique to LS' LS.

Subgoal 1.1.1.1.1:

Variables: VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : public = public -> false
LS : lookup L1 X1 public
RA : mem (X1, I) L2
RA1 : remove_all L2 X1 LRemain
RB : mem (X1, I1) L3
RB1 : remove_all L3 X1 LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
============================
 lookup ((X1, VB)::LRemain1) X1 V
 < apply NEq to _.

Subgoal 1.1.1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V
============================
 lookup ((X, VB)::LRemain1) X1 V
 < LA': apply remove_all_lookup_other to RA1 LA1 _.

Subgoal 1.1.1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V
LA' : lookup L2 X1 V
============================
 lookup ((X, VB)::LRemain1) X1 V
 < LB': apply PE to _ LA'.

Subgoal 1.1.1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V
LA' : lookup L2 X1 V
LB' : lookup L3 X1 V
============================
 lookup ((X, VB)::LRemain1) X1 V
 < apply remove_all_lookup_other_back to RB1 LB' _.

Subgoal 1.1.1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LA : X = X1 -> false
LA1 : lookup LRemain X1 V
LA' : lookup L2 X1 V
LB' : lookup L3 X1 V
H1 : lookup LRemain1 X1 V
============================
 lookup ((X, VB)::LRemain1) X1 V
 < search.

Subgoal 1.1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 forall X1 V,
   lookup L1 X1 public -> lookup ((X, VB)::LRemain1) X1 V -> lookup ((X, VA)::LRemain) X1 V
 < intros LS' LB.

Subgoal 1.1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LB : lookup ((X, VB)::LRemain1) X1 V
============================
 lookup ((X, VA)::LRemain) X1 V
 < LB: case LB.

Subgoal 1.1.1.2.1:

Variables: L VA Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X1 L
RA : mem (X1, I) L2
RA1 : remove_all L2 X1 LRemain
RB : mem (X1, I1) L3
RB1 : remove_all L3 X1 LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
============================
 lookup ((X1, VA)::LRemain) X1 V
 < apply lookup_unique to LS' LS.

Subgoal 1.1.1.2.1:

Variables: VA Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : public = public -> false
LS : lookup L1 X1 public
RA : mem (X1, I) L2
RA1 : remove_all L2 X1 LRemain
RB : mem (X1, I1) L3
RB1 : remove_all L3 X1 LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
============================
 lookup ((X1, VA)::LRemain) X1 V
 < apply NEq to _.

Subgoal 1.1.1.2.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V
============================
 lookup ((X, VA)::LRemain) X1 V
 < LB': apply remove_all_lookup_other to RB1 LB1 _.

Subgoal 1.1.1.2.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V
LB' : lookup L3 X1 V
============================
 lookup ((X, VA)::LRemain) X1 V
 < LA': apply PE1 to _ LB'.

Subgoal 1.1.1.2.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V
LB' : lookup L3 X1 V
LA' : lookup L2 X1 V
============================
 lookup ((X, VA)::LRemain) X1 V
 < apply remove_all_lookup_other_back to RA1 LA' _.

Subgoal 1.1.1.2.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3 X1 V
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
LS' : lookup L1 X1 public
LB : X = X1 -> false
LB1 : lookup LRemain1 X1 V
LB' : lookup L3 X1 V
LA' : lookup L2 X1 V
H1 : lookup LRemain X1 V
============================
 lookup ((X, VA)::LRemain) X1 V
 < search.

Subgoal 1.1.1.3:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 I1 Rest2 LRemain1 L3
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : mem (X, I1) L3
RB1 : remove_all L3 X LRemain1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 public_equiv Rest Rest1 Rest2
 < search.

Subgoal 1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 New L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) (L3::New)
 < NSB: case NSB.

Subgoal 1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 New L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NSA : names_same (L2::Rest1) (L1::Rest)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New
NSB : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
NSB1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
NSB2 : names_same Rest2 Rest
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) (L3::New)
 < NSA: case NSA.

Subgoal 1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 New L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New
NSB : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
NSB1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
NSB2 : names_same Rest2 Rest
NSA : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
NSA1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
NSA2 : names_same Rest1 Rest
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) (L3::New)
 < MS: apply NSA to RA.

Subgoal 1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 New L3 Rest2 IB
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New
NSB : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
NSB1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
NSB2 : names_same Rest2 Rest
NSA : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
NSA1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
NSA2 : names_same Rest1 Rest
MS : mem (X, IB) L1
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) (L3::New)
 < MB: apply NSB1 to MS.

Subgoal 1.1.2:

Variables: X L VA VB Rest L1 I Rest1 LRemain L2 New L3 Rest2 IB IA
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NEq : L = public -> false
LS : lookup L1 X L
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New
NSB : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
NSB1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
NSB2 : names_same Rest2 Rest
NSA : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
NSA1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
NSA2 : names_same Rest1 Rest
MS : mem (X, IB) L1
MB : mem (X, IA) L3
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) (L3::New)
 < apply no_lookup_mem to RB MB.

Subgoal 1.2:

Variables: GB X L VA VB RB Rest L1 New L2 Rest1
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : lookup L1 X L
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
============================
 public_equiv (L1::Rest) (L2::New) RB
 < MS: apply lookup_mem to LS.

Subgoal 1.2:

Variables: GB X L VA VB RB Rest L1 New L2 Rest1
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : lookup L1 X L
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
MS : mem (X, L) L1
============================
 public_equiv (L1::Rest) (L2::New) RB
 < NSA: case NSA.

Subgoal 1.2:

Variables: GB X L VA VB RB Rest L1 New L2 Rest1
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : lookup L1 X L
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
MS : mem (X, L) L1
NSA : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
NSA1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
NSA2 : names_same Rest1 Rest
============================
 public_equiv (L1::Rest) (L2::New) RB
 < MA: apply NSA1 to MS.

Subgoal 1.2:

Variables: GB X L VA VB RB Rest L1 New L2 Rest1 IA
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : lookup L1 X L
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
MS : mem (X, L) L1
NSA : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
NSA1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
NSA2 : names_same Rest1 Rest
MA : mem (X, IA) L2
============================
 public_equiv (L1::Rest) (L2::New) RB
 < apply no_lookup_mem to RA MA.

Subgoal 2:

Variables: GA GB X L VA VB RA RB Rest L1
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) GA GB
NSA : names_same GA (L1::Rest)
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RA : replaceScopes X VA GA RA
RB : replaceScopes X VB GB RB
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
============================
 public_equiv (L1::Rest) RA RB
 < RA: case RA.

Subgoal 2.1:

Variables: GB X L VA VB RB Rest L1 I Rest1 LRemain L2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) RB
 < NSA: case NSA.

Subgoal 2.1:

Variables: GB X L VA VB RB Rest L1 I Rest1 LRemain L2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
NSA : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
NSA1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
NSA2 : names_same Rest1 Rest
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) RB
 < MS: apply NSA to RA.

Subgoal 2.1:

Variables: GB X L VA VB RB Rest L1 I Rest1 LRemain L2 IB
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : mem (X, I) L2
RA1 : remove_all L2 X LRemain
NSA : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
NSA1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
NSA2 : names_same Rest1 Rest
MS : mem (X, IB) L1
============================
 public_equiv (L1::Rest) (((X, VA)::LRemain)::Rest1) RB
 < apply no_lookup_mem to LS MS.

Subgoal 2.2:

Variables: GB X L VA VB RB Rest L1 New L2 Rest1
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) GB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same GB (L1::Rest)
NEq : L = public -> false
RB : replaceScopes X VB GB RB
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
============================
 public_equiv (L1::Rest) (L2::New) RB
 < RB: case RB.

Subgoal 2.2.1:

Variables: X L VA VB Rest L1 New L2 Rest1 I Rest2 LRemain L3
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : mem (X, I) L3
RB1 : remove_all L3 X LRemain
============================
 public_equiv (L1::Rest) (L2::New) (((X, VB)::LRemain)::Rest2)
 < NSB: case NSB.

Subgoal 2.2.1:

Variables: X L VA VB Rest L1 New L2 Rest1 I Rest2 LRemain L3
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NSA : names_same (L2::Rest1) (L1::Rest)
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : mem (X, I) L3
RB1 : remove_all L3 X LRemain
NSB : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
NSB1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
NSB2 : names_same Rest2 Rest
============================
 public_equiv (L1::Rest) (L2::New) (((X, VB)::LRemain)::Rest2)
 < MS: apply NSB to RB.

Subgoal 2.2.1:

Variables: X L VA VB Rest L1 New L2 Rest1 I Rest2 LRemain L3 IB
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NSA : names_same (L2::Rest1) (L1::Rest)
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : mem (X, I) L3
RB1 : remove_all L3 X LRemain
NSB : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
NSB1 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
NSB2 : names_same Rest2 Rest
MS : mem (X, IB) L1
============================
 public_equiv (L1::Rest) (L2::New) (((X, VB)::LRemain)::Rest2)
 < apply no_lookup_mem to LS MS.

Subgoal 2.2.2:

Variables: X L VA VB Rest L1 New L2 Rest1 New1 L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
PE : public_equiv (L1::Rest) (L2::Rest1) (L3::Rest2)
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New1
============================
 public_equiv (L1::Rest) (L2::New) (L3::New1)
 < PE: case PE.

Subgoal 2.2.2:

Variables: X L VA VB Rest L1 New L2 Rest1 New1 L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSA : names_same (L2::Rest1) (L1::Rest)
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
============================
 public_equiv (L1::Rest) (L2::New) (L3::New1)
 < case NSA.

Subgoal 2.2.2:

Variables: X L VA VB Rest L1 New L2 Rest1 New1 L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NSB : names_same (L3::Rest2) (L1::Rest)
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
H1 : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
H2 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
H3 : names_same Rest1 Rest
============================
 public_equiv (L1::Rest) (L2::New) (L3::New1)
 < case NSB.

Subgoal 2.2.2:

Variables: X L VA VB Rest L1 New L2 Rest1 New1 L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
H1 : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
H2 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
H3 : names_same Rest1 Rest
H4 : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
H5 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
H6 : names_same Rest2 Rest
============================
 public_equiv (L1::Rest) (L2::New) (L3::New1)
 < apply IH to _ _ _ LS1 _ RA1 RB1.

Subgoal 2.2.2:

Variables: X L VA VB Rest L1 New L2 Rest1 New1 L3 Rest2
IH : forall SG GA GB X L VA VB RA RB,
       public_equiv SG GA GB -> names_same GA SG -> names_same GB SG -> lookupScopes X SG L * ->
       (L = public -> false) -> replaceScopes X VA GA RA -> replaceScopes X VB GB RB ->
       public_equiv SG RA RB
NEq : L = public -> false
LS : no_lookup L1 X
LS1 : lookupScopes X Rest L *
RA : no_lookup L2 X
RA1 : replaceScopes X VA Rest1 New
RB : no_lookup L3 X
RB1 : replaceScopes X VB Rest2 New1
PE : forall X V, lookup L1 X public -> lookup L2 X V -> lookup L3 X V
PE1 : forall X V, lookup L1 X public -> lookup L3 X V -> lookup L2 X V
PE2 : public_equiv Rest Rest1 Rest2
H1 : forall X IA, mem (X, IA) L2 -> exists IB, mem (X, IB) L1
H2 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L2
H3 : names_same Rest1 Rest
H4 : forall X IA, mem (X, IA) L3 -> exists IB, mem (X, IB) L1
H5 : forall X IB, mem (X, IB) L1 -> exists IA, mem (X, IA) L3
H6 : names_same Rest2 Rest
H7 : public_equiv Rest New New1
============================
 public_equiv (L1::Rest) (L2::New) (L3::New1)
 < search.

Proof completed.
 < Theorem replaceScopes_public_equiv :
     forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'.

============================
 forall SG L X V L' SL,
   names_same L SG -> replaceScopes X V L L' -> lookupScopes X SG SL -> (SL = public ->
   false) -> public_equiv SG L L'
 < induction on 2.

IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
============================
 forall SG L X V L' SL,
   names_same L SG -> replaceScopes X V L L' @ -> lookupScopes X SG SL -> (SL = public ->
   false) -> public_equiv SG L L'
 < intros NS RS LS NEq.

Variables: SG L X V L' SL
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NS : names_same L SG
RS : replaceScopes X V L L' @
LS : lookupScopes X SG SL
NEq : SL = public -> false
============================
 public_equiv SG L L'
 < RS: case RS.

Subgoal 1:

Variables: SG X V SL I Rest LRemain L1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NS : names_same (L1::Rest) SG
LS : lookupScopes X SG SL
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
============================
 public_equiv SG (L1::Rest) (((X, V)::LRemain)::Rest)
 < LS: case LS.

Subgoal 1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NS : names_same (L1::Rest) (L2::Rest1)
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
============================
 public_equiv (L2::Rest1) (L1::Rest) (((X, V)::LRemain)::Rest)
 < NS: case NS.

Subgoal 1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
============================
 public_equiv (L2::Rest1) (L1::Rest) (((X, V)::LRemain)::Rest)
 < apply public_equiv_refl to NS2.

Subgoal 1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
============================
 public_equiv (L2::Rest1) (L1::Rest) (((X, V)::LRemain)::Rest)
 < unfold .

Subgoal 1.1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
============================
 forall X1 V1,
   lookup L2 X1 public -> lookup L1 X1 V1 -> lookup ((X, V)::LRemain) X1 V1
 < intros LP LL.

Subgoal 1.1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
LL : lookup L1 X1 V1
============================
 lookup ((X, V)::LRemain) X1 V1
 < assert X = X1 -> false.

Subgoal 1.1.1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
LL : lookup L1 X1 V1
============================
 X = X1 -> false
 < intros E.

Subgoal 1.1.1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
LL : lookup L1 X1 V1
E : X = X1
============================
 false
 < case E.

Subgoal 1.1.1.1:

Variables: V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X1, I) L1
RS1 : remove_all L1 X1 LRemain
LS : lookup L2 X1 SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
LL : lookup L1 X1 V1
============================
 false
 < apply lookup_unique to LS LP.

Subgoal 1.1.1.1:

Variables: V I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : public = public -> false
RS : mem (X1, I) L1
RS1 : remove_all L1 X1 LRemain
LS : lookup L2 X1 public
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
LL : lookup L1 X1 V1
============================
 false
 < backchain NEq.

Subgoal 1.1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
LL : lookup L1 X1 V1
H2 : X = X1 -> false
============================
 lookup ((X, V)::LRemain) X1 V1
 < apply remove_all_lookup_other_back to RS1 LL _.

Subgoal 1.1.1:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
LL : lookup L1 X1 V1
H2 : X = X1 -> false
H3 : lookup LRemain X1 V1
============================
 lookup ((X, V)::LRemain) X1 V1
 < search.

Subgoal 1.1.2:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
============================
 forall X1 V1,
   lookup L2 X1 public -> lookup ((X, V)::LRemain) X1 V1 -> lookup L1 X1 V1
 < intros LP L+.

Subgoal 1.1.2:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
L+ : lookup ((X, V)::LRemain) X1 V1
============================
 lookup L1 X1 V1
 < L: case L+.

Subgoal 1.1.2.1:

Variables: SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X1, I) L1
RS1 : remove_all L1 X1 LRemain
LS : lookup L2 X1 SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
============================
 lookup L1 X1 V1
 < apply lookup_unique to LS LP.

Subgoal 1.1.2.1:

Variables: I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : public = public -> false
RS : mem (X1, I) L1
RS1 : remove_all L1 X1 LRemain
LS : lookup L2 X1 public
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
============================
 lookup L1 X1 V1
 < apply NEq to _.

Subgoal 1.1.2.2:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
L : X = X1 -> false
L1 : lookup LRemain X1 V1
============================
 lookup L1 X1 V1
 < apply remove_all_lookup_other to RS1 L1 _.

Subgoal 1.1.2.2:

Variables: X V SL I Rest LRemain L1 Rest1 L2 X1 V1
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
LP : lookup L2 X1 public
L : X = X1 -> false
L1 : lookup LRemain X1 V1
H2 : lookup L1 X1 V1
============================
 lookup L1 X1 V1
 < search.

Subgoal 1.1.3:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
H1 : public_equiv Rest1 Rest Rest
============================
 public_equiv Rest1 Rest Rest
 < search.

Subgoal 1.2:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NS : names_same (L1::Rest) (L2::Rest1)
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : no_lookup L2 X
LS1 : lookupScopes X Rest1 SL
============================
 public_equiv (L2::Rest1) (L1::Rest) (((X, V)::LRemain)::Rest)
 < NS: case NS.

Subgoal 1.2:

Variables: X V SL I Rest LRemain L1 Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : no_lookup L2 X
LS1 : lookupScopes X Rest1 SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
============================
 public_equiv (L2::Rest1) (L1::Rest) (((X, V)::LRemain)::Rest)
 < MS: apply NS to RS.

Subgoal 1.2:

Variables: X V SL I Rest LRemain L1 Rest1 L2 IB
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : mem (X, I) L1
RS1 : remove_all L1 X LRemain
LS : no_lookup L2 X
LS1 : lookupScopes X Rest1 SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
MS : mem (X, IB) L2
============================
 public_equiv (L2::Rest1) (L1::Rest) (((X, V)::LRemain)::Rest)
 < apply no_lookup_mem to LS MS.

Subgoal 2:

Variables: SG X V SL New L1 Rest
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NS : names_same (L1::Rest) SG
LS : lookupScopes X SG SL
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
============================
 public_equiv SG (L1::Rest) (L1::New)
 < LS: case LS.

Subgoal 2.1:

Variables: X V SL New L1 Rest Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NS : names_same (L1::Rest) (L2::Rest1)
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
LS : lookup L2 X SL
============================
 public_equiv (L2::Rest1) (L1::Rest) (L1::New)
 < NS: case NS.

Subgoal 2.1:

Variables: X V SL New L1 Rest Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
============================
 public_equiv (L2::Rest1) (L1::Rest) (L1::New)
 < MS: apply lookup_mem to LS.

Subgoal 2.1:

Variables: X V SL New L1 Rest Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
MS : mem (X, SL) L2
============================
 public_equiv (L2::Rest1) (L1::Rest) (L1::New)
 < ML: apply NS1 to MS.

Subgoal 2.1:

Variables: X V SL New L1 Rest Rest1 L2 IA
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
LS : lookup L2 X SL
NS : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
NS1 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
NS2 : names_same Rest Rest1
MS : mem (X, SL) L2
ML : mem (X, IA) L1
============================
 public_equiv (L2::Rest1) (L1::Rest) (L1::New)
 < apply no_lookup_mem to RS ML.

Subgoal 2.2:

Variables: X V SL New L1 Rest Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NS : names_same (L1::Rest) (L2::Rest1)
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
LS : no_lookup L2 X
LS1 : lookupScopes X Rest1 SL
============================
 public_equiv (L2::Rest1) (L1::Rest) (L1::New)
 < case NS.

Subgoal 2.2:

Variables: X V SL New L1 Rest Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
LS : no_lookup L2 X
LS1 : lookupScopes X Rest1 SL
H1 : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
H2 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
H3 : names_same Rest Rest1
============================
 public_equiv (L2::Rest1) (L1::Rest) (L1::New)
 < apply IH to _ RS1 LS1 _.

Subgoal 2.2:

Variables: X V SL New L1 Rest Rest1 L2
IH : forall SG L X V L' SL,
       names_same L SG -> replaceScopes X V L L' * -> lookupScopes X SG SL -> (SL = public ->
       false) -> public_equiv SG L L'
NEq : SL = public -> false
RS : no_lookup L1 X
RS1 : replaceScopes X V Rest New *
LS : no_lookup L2 X
LS1 : lookupScopes X Rest1 SL
H1 : forall X IA, mem (X, IA) L1 -> exists IB, mem (X, IB) L2
H2 : forall X IB, mem (X, IB) L2 -> exists IA, mem (X, IA) L1
H3 : names_same Rest Rest1
H4 : public_equiv Rest1 Rest New
============================
 public_equiv (L2::Rest1) (L1::Rest) (L1::New)
 < search.

Proof completed.
 < Extensible_Theorem
      stmt_not_public_no_public_change : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG) ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) ->
         NS : names_same (Scope::EE) (SScope::SG) ->
         Ev : evalStmt FE (Scope::EE) S (Scope'::EE') O ->
         Sec : secure SF (SScope::SG) PC S SG' ->
         NEq : (PC = public -> false) ->
         public_equiv SG EE EE'
      on Ev as IH_S,
      expr_not_public_no_public_change : forall E SF SG PC L FE EE V EE' O,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         NS : names_same EE SG ->
         Ev : evalExpr FE EE E V EE' O ->
         Lev : level SF SG PC E L ->
         NEq : (PC = public -> false) ->
         public_equiv SG EE EE'
      on Ev as IH_E,
      args_not_public_no_public_change : forall A SF SG PC L FE EE V EE' O,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         NS : names_same EE SG ->
         Ev : evalArgs FE EE A V EE' O ->
         Lev : levelArgs SF SG PC A L ->
         NEq : (PC = public -> false) ->
         public_equiv SG EE EE'
      on Ev as IH_A,
      recFields_not_public_no_public_change : forall RF SF SG PC L FE EE V EE' O,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         NS : names_same EE SG ->
         Ev : evalRecFields FE EE RF V EE' O ->
         Lev : levelRecFields SF SG PC RF L ->
         NEq : (PC = public -> false) ->
         public_equiv SG EE EE'
      on Ev as IH_RF.

Subgoal 1:

Variables: S SF SScope SG PC SG' FE Scope EE Scope' EE' O
IsS : is_stmt S
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) S (Scope'::EE') O
Sec : secure SF (SScope::SG) PC S SG'
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
 < search.

Subgoal 2:

Variables: E SF SG PC L FE EE V EE' O
IsE : is_expr E
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE E V EE' O
Lev : level SF SG PC E L
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
 < search.

Subgoal 3:

Variables: A SF SG PC L FE EE V EE' O
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE A V EE' O
Lev : levelArgs SF SG PC A L
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
 < search.

Subgoal 4:

Variables: RF SF SG PC L FE EE V EE' O
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE RF V EE' O
Lev : levelRecFields SF SG PC RF L
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
 < search.

Subgoal 5.1.1:

Variables: SF SScope SG PC SG' FE Scope' EE'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope'::EE')
NS : names_same (Scope'::EE') (SScope::SG)
Ev : evalStmt FE (Scope'::EE') noop (Scope'::EE') [] @
Sec : secure SF (SScope::SG) PC noop SG'
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < case Sec.

Subgoal 5.1.1:

Variables: SF SScope SG PC FE Scope' EE'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope'::EE')
NS : names_same (Scope'::EE') (SScope::SG)
Ev : evalStmt FE (Scope'::EE') noop (Scope'::EE') [] @
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < case NS.

Subgoal 5.1.1:

Variables: SF SScope SG PC FE Scope' EE'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope'::EE')
Ev : evalStmt FE (Scope'::EE') noop (Scope'::EE') [] @
NEq : PC = public -> false
H1 : forall X IA, mem (X, IA) Scope' -> exists IB, mem (X, IB) SScope
H2 : forall X IB, mem (X, IB) SScope -> exists IA, mem (X, IA) Scope'
H3 : names_same EE' SG
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 O3 S2 S1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (seq S1 S2) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 O3 S2 S1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (seq S1 S2) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 O3 S2 S1 SG3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
============================
 public_equiv SG EE EE'
 < apply secure_older_scopes to _ _ _ Sec.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 O3 S2 S1 Scope'1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
============================
 public_equiv SG EE EE'
 < NS': apply secure_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 O3 S2 S1 Scope'1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
NS' : names_same EE3 (Scope'1::SG)
============================
 public_equiv SG EE EE'
 < case NS' (keep).

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 O3 S2 S1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H5 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
============================
 public_equiv SG EE EE'
 < PE1: apply IH_S to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 O3 S2 S1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H5 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
PE1 : public_equiv SG EE ARest
============================
 public_equiv SG EE EE'
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 O3 S2 S1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H5 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H7 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
============================
 public_equiv SG EE EE'
 < apply secure_is to _ _ _ Sec.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 O3 S2 S1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H5 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H7 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H8 : is_list (is_list (is_pair is_string is_slev)) (Scope'1::SG)
============================
 public_equiv SG EE EE'
 < PE2: apply IH_S to _ _ _ _ _ _ _ Ev2 Sec1 _.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 O3 S2 S1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H5 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H7 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H8 : is_list (is_list (is_pair is_string is_slev)) (Scope'1::SG)
PE2 : public_equiv SG ARest EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.1.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 O3 S2 S1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 (Scope'::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (SScope::SG) PC S1 (Scope'1::SG)
Sec1 : secure SF (Scope'1::SG) PC S2 SG'
H3 : forall X L, lookup SScope X L -> lookup Scope'1 X L
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H5 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H7 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H8 : is_list (is_list (is_pair is_string is_slev)) (Scope'1::SG)
PE2 : public_equiv SG ARest EE'
H9 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.3:

Variables: SF SScope SG PC SG' FE Scope EE EE' O Scope1 V X E Ty
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE') O @
Sec : secure SF (SScope::SG) PC (declare Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.3:

Variables: SF SScope SG PC SG' FE Scope EE EE' O Scope1 V X E Ty
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE') O @
Sec : secure SF (SScope::SG) PC (declare Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.3:

Variables: SF SScope SG FE Scope EE EE' O Scope1 V X E Ty
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (SScope::SG) public E public
Sec1 : no_lookup SScope X
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.4:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O V EE3 E X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (assign X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.4:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O V EE3 E X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (assign X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 (Scope'::EE')
H1 : is_string X
H2 : is_expr E
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.4.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 E X L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes X (SScope::SG) private
============================
 public_equiv SG EE EE'
 < PE: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.4.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 E X L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes X (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) EE3
============================
 public_equiv SG EE EE'
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.4.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 E X L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes X (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) EE3
NS' : names_same EE3 (SScope::SG)
============================
 public_equiv SG EE EE'
 < PE1: apply replaceScopes_public_equiv to _ Ev2 Sec1 _.

Subgoal 5.1.4.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 E X L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes X (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) EE3
NS' : names_same EE3 (SScope::SG)
PE1 : public_equiv (SScope::SG) EE3 (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case NS'.

Subgoal 5.1.4.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V E X L ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (A::ARest) O *
Ev2 : replaceScopes X V (A::ARest) (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes X (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) (A::ARest)
PE1 : public_equiv (SScope::SG) (A::ARest) (Scope'::EE')
H3 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) SScope
H4 : forall X IB, mem (X, IB) SScope -> exists IA, mem (X, IA) A
H5 : names_same ARest SG
============================
 public_equiv SG EE EE'
 < PE2: apply public_equiv_trans to PE PE1.

Subgoal 5.1.4.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V E X L ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (A::ARest) O *
Ev2 : replaceScopes X V (A::ARest) (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes X (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) (A::ARest)
PE1 : public_equiv (SScope::SG) (A::ARest) (Scope'::EE')
H3 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) SScope
H4 : forall X IB, mem (X, IB) SScope -> exists IA, mem (X, IA) A
H5 : names_same ARest SG
PE2 : public_equiv (SScope::SG) (Scope::EE) (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case PE2.

Subgoal 5.1.4.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V E X L ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (A::ARest) O *
Ev2 : replaceScopes X V (A::ARest) (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes X (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) (A::ARest)
PE1 : public_equiv (SScope::SG) (A::ARest) (Scope'::EE')
H3 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) SScope
H4 : forall X IB, mem (X, IB) SScope -> exists IA, mem (X, IA) A
H5 : names_same ARest SG
H6 : forall X V, lookup SScope X public -> lookup Scope X V -> lookup Scope' X V
H7 : forall X V, lookup SScope X public -> lookup Scope' X V -> lookup Scope X V
H8 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.4.2:

Variables: SF SScope SG FE Scope EE Scope' EE' O V EE3 E X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (assign X E) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 (Scope'::EE')
H1 : is_string X
H2 : is_expr E
Sec : level SF (SScope::SG) public E public
Sec1 : lookupScopes X (SScope::SG) public
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.5:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O V EE3 FieldVals NewVals E Fields Rec
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (recUpdate Rec Fields E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.5:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O V EE3 FieldVals NewVals E Fields Rec
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (recUpdate Rec Fields E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.5.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 FieldVals NewVals E Fields Rec L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes Rec (SScope::SG) private
============================
 public_equiv SG EE EE'
 < PE: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.5.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 FieldVals NewVals E Fields Rec L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes Rec (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) EE3
============================
 public_equiv SG EE EE'
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.5.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 FieldVals NewVals E Fields Rec L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes Rec (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) EE3
NS' : names_same EE3 (SScope::SG)
============================
 public_equiv SG EE EE'
 < PE1: apply replaceScopes_public_equiv to _ Ev4 Sec1 _.

Subgoal 5.1.5.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V EE3 FieldVals NewVals E Fields Rec L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes Rec (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) EE3
NS' : names_same EE3 (SScope::SG)
PE1 : public_equiv (SScope::SG) EE3 (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case NS'.

Subgoal 5.1.5.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V FieldVals NewVals E Fields Rec L ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (A::ARest) O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) (A::ARest) (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes Rec (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) (A::ARest)
PE1 : public_equiv (SScope::SG) (A::ARest) (Scope'::EE')
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) SScope
H5 : forall X IB, mem (X, IB) SScope -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
============================
 public_equiv SG EE EE'
 < PE2: apply public_equiv_trans to PE PE1.

Subgoal 5.1.5.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V FieldVals NewVals E Fields Rec L ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (A::ARest) O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) (A::ARest) (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes Rec (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) (A::ARest)
PE1 : public_equiv (SScope::SG) (A::ARest) (Scope'::EE')
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) SScope
H5 : forall X IB, mem (X, IB) SScope -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
PE2 : public_equiv (SScope::SG) (Scope::EE) (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case PE2.

Subgoal 5.1.5.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O V FieldVals NewVals E Fields Rec L ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (A::ARest) O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) (A::ARest) (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) PC E L
Sec1 : lookupScopes Rec (SScope::SG) private
PE : public_equiv (SScope::SG) (Scope::EE) (A::ARest)
PE1 : public_equiv (SScope::SG) (A::ARest) (Scope'::EE')
H4 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) SScope
H5 : forall X IB, mem (X, IB) SScope -> exists IA, mem (X, IA) A
H6 : names_same ARest SG
H7 : forall X V, lookup SScope X public -> lookup Scope X V -> lookup Scope' X V
H8 : forall X V, lookup SScope X public -> lookup Scope' X V -> lookup Scope X V
H9 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.5.2:

Variables: SF SScope SG FE Scope EE Scope' EE' O V EE3 FieldVals NewVals E Fields Rec
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 (Scope'::EE')
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF (SScope::SG) public E public
Sec1 : lookupScopes Rec (SScope::SG) public
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.6:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.6:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
============================
 public_equiv SG EE EE'
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
============================
 public_equiv SG EE EE'
 < assert Sl1 = public -> false.

Subgoal 5.1.6.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.1.6.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.1.6.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::(SScope::SG)) public Th SGT
Sec3 : secure SF ([]::(SScope::SG)) public El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 5.1.6.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::(SScope::SG)) public Th SGT
Sec3 : secure SF ([]::(SScope::SG)) public El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
============================
 public_equiv SG EE EE'
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
============================
 public_equiv SG EE EE'
 < apply names_same_add_scope to NS'.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < apply join_is to _ _ Sec1.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : is_slev Sl1
============================
 public_equiv SG EE EE'
 < PE2: apply IH_S to _ _ _ _ _ _ _ Ev2 Sec2 _.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : is_slev Sl1
PE2 : public_equiv (SScope::SG) EE3 (Scope'::EE')
============================
 public_equiv SG EE EE'
 < PE2': case PE2.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O O2 Scope1 O3 El Th Cond L Sl1 SGT SGF G1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope2::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope2::G1)) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) (Scope2::G1)
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same (Scope2::G1) (SScope::SG)
H6 : names_same ([]::(Scope2::G1)) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) (Scope2::G1)
H8 : is_slev Sl1
PE2' : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope' X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope' X V -> lookup Scope2 X V
PE2'2 : public_equiv SG G1 EE'
============================
 public_equiv SG EE EE'
 < PE1': case PE1.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O O2 Scope1 O3 El Th Cond L Sl1 SGT SGF G1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope2::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope2::G1)) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same (Scope2::G1) (SScope::SG)
H6 : names_same ([]::(Scope2::G1)) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) (Scope2::G1)
H8 : is_slev Sl1
PE2' : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope' X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope' X V -> lookup Scope2 X V
PE2'2 : public_equiv SG G1 EE'
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope2 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope2 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1'2 PE2'2.

Subgoal 5.1.6:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O O2 Scope1 O3 El Th Cond L Sl1 SGT SGF G1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope2::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope2::G1)) Th (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same (Scope2::G1) (SScope::SG)
H6 : names_same ([]::(Scope2::G1)) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) (Scope2::G1)
H8 : is_slev Sl1
PE2' : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope' X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope' X V -> lookup Scope2 X V
PE2'2 : public_equiv SG G1 EE'
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope2 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope2 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
H9 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.7:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.7:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
============================
 public_equiv SG EE EE'
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
============================
 public_equiv SG EE EE'
 < assert Sl1 = public -> false.

Subgoal 5.1.7.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.1.7.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.1.7.1:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::(SScope::SG)) public Th SGT
Sec3 : secure SF ([]::(SScope::SG)) public El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 5.1.7.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::(SScope::SG)) public Th SGT
Sec3 : secure SF ([]::(SScope::SG)) public El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
============================
 public_equiv SG EE EE'
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
============================
 public_equiv SG EE EE'
 < apply names_same_add_scope to NS'.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < apply join_is to _ _ Sec1.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : is_slev Sl1
============================
 public_equiv SG EE EE'
 < PE2: apply IH_S to _ _ _ _ _ _ _ Ev2 Sec3 _.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) EE3
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same EE3 (SScope::SG)
H6 : names_same ([]::EE3) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : is_slev Sl1
PE2 : public_equiv (SScope::SG) EE3 (Scope'::EE')
============================
 public_equiv SG EE EE'
 < PE2': case PE2.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O O2 Scope1 O3 El Th Cond L Sl1 SGT SGF G1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope2::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope2::G1)) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
PE1 : public_equiv (SScope::SG) (Scope::EE) (Scope2::G1)
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same (Scope2::G1) (SScope::SG)
H6 : names_same ([]::(Scope2::G1)) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) (Scope2::G1)
H8 : is_slev Sl1
PE2' : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope' X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope' X V -> lookup Scope2 X V
PE2'2 : public_equiv SG G1 EE'
============================
 public_equiv SG EE EE'
 < PE1': case PE1.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O O2 Scope1 O3 El Th Cond L Sl1 SGT SGF G1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope2::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope2::G1)) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same (Scope2::G1) (SScope::SG)
H6 : names_same ([]::(Scope2::G1)) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) (Scope2::G1)
H8 : is_slev Sl1
PE2' : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope' X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope' X V -> lookup Scope2 X V
PE2'2 : public_equiv SG G1 EE'
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope2 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope2 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1'2 PE2'2.

Subgoal 5.1.7:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O O2 Scope1 O3 El Th Cond L Sl1 SGT SGF G1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope2::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope2::G1)) El (Scope1::(Scope'::EE')) O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF (SScope::SG) PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::(SScope::SG)) Sl1 Th SGT
Sec3 : secure SF ([]::(SScope::SG)) Sl1 El SGF
H4 : is_slev L
H5 : Sl1 = public -> false
NS' : names_same (Scope2::G1) (SScope::SG)
H6 : names_same ([]::(Scope2::G1)) ([]::(SScope::SG))
H7 : is_list (is_list (is_pair is_string is_value)) (Scope2::G1)
H8 : is_slev Sl1
PE2' : forall X V,
         lookup SScope X public -> lookup Scope2 X V -> lookup Scope' X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope' X V -> lookup Scope2 X V
PE2'2 : public_equiv SG G1 EE'
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope2 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope2 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
H9 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.8:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.8:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 public_equiv SG EE EE'
 < Sec: case Sec (keep).

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec1 _.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
PE1 : public_equiv (SScope::SG) (Scope::EE) EE2
============================
 public_equiv SG EE EE'
 < apply level_is to _ _ _ Sec1.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
PE1 : public_equiv (SScope::SG) (Scope::EE) EE2
H3 : is_slev L
============================
 public_equiv SG EE EE'
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec1.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
PE1 : public_equiv (SScope::SG) (Scope::EE) EE2
H3 : is_slev L
NS' : names_same EE2 (SScope::SG)
============================
 public_equiv SG EE EE'
 < apply names_same_add_scope to NS'.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
PE1 : public_equiv (SScope::SG) (Scope::EE) EE2
H3 : is_slev L
NS' : names_same EE2 (SScope::SG)
H4 : names_same ([]::EE2) ([]::(SScope::SG))
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
PE1 : public_equiv (SScope::SG) (Scope::EE) EE2
H3 : is_slev L
NS' : names_same EE2 (SScope::SG)
H4 : names_same ([]::EE2) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE EE'
 < PE2: apply IH_S to _ _ _ _ _ _ _ Ev2 Sec2 _.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
PE1 : public_equiv (SScope::SG) (Scope::EE) EE2
H3 : is_slev L
NS' : names_same EE2 (SScope::SG)
H4 : names_same ([]::EE2) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) EE2
PE2 : public_equiv (SScope::SG) EE2 EE4
============================
 public_equiv SG EE EE'
 < PE2': case PE2.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope2 SG2 G2 Scope4 G1 Scope3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
PE1 : public_equiv (SScope::SG) (Scope::EE) (Scope3::G1)
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
============================
 public_equiv SG EE EE'
 < PE1': case PE1.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope2 SG2 G2 Scope4 G1 Scope3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
============================
 public_equiv SG EE EE'
 < PE3: apply public_equiv_trans to PE1'2 PE2'2.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope2 SG2 G2 Scope4 G1 Scope3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
============================
 public_equiv SG EE EE'
 < NS+: apply secure_eval_names_same to _ _ _ _ _ _ Ev2 Sec2.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope2 SG2 G2 Scope4 G1 Scope3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
NS+ : names_same (Scope1::(Scope4::G2)) (Scope2::SG2)
============================
 public_equiv SG EE EE'
 < Is++: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope2 SG2 G2 Scope4 G1 Scope3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
NS+ : names_same (Scope1::(Scope4::G2)) (Scope2::SG2)
Is++ : is_list (is_list (is_pair is_string is_value)) (Scope1::(Scope4::G2))
============================
 public_equiv SG EE EE'
 < case Is++.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L Scope2 SG2 G2 Scope4 G1 Scope3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope2::SG2)
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
NS+ : names_same (Scope1::(Scope4::G2)) (Scope2::SG2)
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) (Scope4::G2)
============================
 public_equiv SG EE EE'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L G2 Scope4 G1 Scope3 Scope'1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope'1::(SScope::SG))
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
NS+ : names_same (Scope1::(Scope4::G2)) (Scope'1::(SScope::SG))
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) (Scope4::G2)
H8 : forall X L, lookup [] X L -> lookup Scope'1 X L
============================
 public_equiv SG EE EE'
 < case NS+.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L G2 Scope4 G1 Scope3 Scope'1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope'1::(SScope::SG))
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) (Scope4::G2)
H8 : forall X L, lookup [] X L -> lookup Scope'1 X L
H9 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'1
H10 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) Scope1
H11 : names_same (Scope4::G2) (SScope::SG)
============================
 public_equiv SG EE EE'
 < PE4: apply IH_S to _ _ _ _ _ _ _ Ev3 Sec _.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L G2 Scope4 G1 Scope3 Scope'1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope'1::(SScope::SG))
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) (Scope4::G2)
H8 : forall X L, lookup [] X L -> lookup Scope'1 X L
H9 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'1
H10 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) Scope1
H11 : names_same (Scope4::G2) (SScope::SG)
PE4 : public_equiv SG G2 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE3 PE4.

Subgoal 5.1.8.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 Scope1 O3 O4 O12 Body Cond L G2 Scope4 G1 Scope3 Scope'1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (Scope3::G1) O2 *
Ev2 : evalStmt FE ([]::(Scope3::G1)) Body (Scope1::(Scope4::G2)) O3 *
Ev3 : evalStmt FE (Scope4::G2) (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope'1::(SScope::SG))
H3 : is_slev L
NS' : names_same (Scope3::G1) (SScope::SG)
H4 : names_same ([]::(Scope3::G1)) ([]::(SScope::SG))
H5 : is_list (is_list (is_pair is_string is_value)) (Scope3::G1)
PE2' : forall X V,
         lookup SScope X public -> lookup Scope3 X V -> lookup Scope4 X V
PE2'1 : forall X V,
          lookup SScope X public -> lookup Scope4 X V -> lookup Scope3 X V
PE2'2 : public_equiv SG G1 G2
PE1' : forall X V,
         lookup SScope X public -> lookup Scope X V -> lookup Scope3 X V
PE1'1 : forall X V,
          lookup SScope X public -> lookup Scope3 X V -> lookup Scope X V
PE1'2 : public_equiv SG EE G1
PE3 : public_equiv SG EE G2
H6 : is_list (is_pair is_string is_value) Scope1
H7 : is_list (is_list (is_pair is_string is_value)) (Scope4::G2)
H8 : forall X L, lookup [] X L -> lookup Scope'1 X L
H9 : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'1
H10 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) Scope1
H11 : names_same (Scope4::G2) (SScope::SG)
PE4 : public_equiv SG G2 EE'
H12 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.8.2:

Variables: SF SScope SG FE Scope EE Scope' EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope2 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) public (while Cond Body) (SScope::SG)
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) (Scope'::EE') O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) public Cond public
Sec2 : secure SF ([]::(SScope::SG)) public Body (Scope2::SG2)
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.9:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Body Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope'::EE') O *
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.9:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Body Cond
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope'::EE') O *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 public_equiv SG EE EE'
 < Sec: case Sec (keep).

Subgoal 5.1.9.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O Body Cond L Scope1 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope'::EE') O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope1::SG2)
============================
 public_equiv SG EE EE'
 < PE: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec1 _.

Subgoal 5.1.9.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O Body Cond L Scope1 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope'::EE') O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope1::SG2)
PE : public_equiv (SScope::SG) (Scope::EE) (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case PE.

Subgoal 5.1.9.1:

Variables: SF SScope SG FE Scope EE Scope' EE' O Body Cond L Scope1 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) private (while Cond Body) (SScope::SG)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope'::EE') O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) private Cond L
Sec2 : secure SF ([]::(SScope::SG)) private Body (Scope1::SG2)
H3 : forall X V, lookup SScope X public -> lookup Scope X V -> lookup Scope' X V
H4 : forall X V, lookup SScope X public -> lookup Scope' X V -> lookup Scope X V
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.9.2:

Variables: SF SScope SG FE Scope EE Scope' EE' O Body Cond Scope1 SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (while Cond Body) (Scope'::EE') O @
Sec : secure SF (SScope::SG) public (while Cond Body) (SScope::SG)
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal (Scope'::EE') O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (SScope::SG) public Cond public
Sec2 : secure SF ([]::(SScope::SG)) public Body (Scope1::SG2)
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.10:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Scope1 S1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (scopeStmt S1) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::(Scope'::EE')) O *
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.10:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Scope1 S1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (scopeStmt S1) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::(Scope'::EE')) O *
H1 : is_stmt S1
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.10:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Scope1 S1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::(Scope'::EE')) O *
H1 : is_stmt S1
Sec : secure SF ([]::(SScope::SG)) PC S1 (Scope2::(SScope::SG))
============================
 public_equiv SG EE EE'
 < apply names_same_add_scope to NS.

Subgoal 5.1.10:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Scope1 S1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::(Scope'::EE')) O *
H1 : is_stmt S1
Sec : secure SF ([]::(SScope::SG)) PC S1 (Scope2::(SScope::SG))
H2 : names_same ([]::(Scope::EE)) ([]::(SScope::SG))
============================
 public_equiv SG EE EE'
 < PE: apply IH_S to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.10:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Scope1 S1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::(Scope'::EE')) O *
H1 : is_stmt S1
Sec : secure SF ([]::(SScope::SG)) PC S1 (Scope2::(SScope::SG))
H2 : names_same ([]::(Scope::EE)) ([]::(SScope::SG))
PE : public_equiv (SScope::SG) (Scope::EE) (Scope'::EE')
============================
 public_equiv SG EE EE'
 < case PE.

Subgoal 5.1.10:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Scope1 S1 Scope2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::(Scope'::EE')) O *
H1 : is_stmt S1
Sec : secure SF ([]::(SScope::SG)) PC S1 (Scope2::(SScope::SG))
H2 : names_same ([]::(Scope::EE)) ([]::(SScope::SG))
H3 : forall X V, lookup SScope X public -> lookup Scope X V -> lookup Scope' X V
H4 : forall X V, lookup SScope X public -> lookup Scope' X V -> lookup Scope X V
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.11:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O I O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E (intVal I) (Scope'::EE') O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 public_equiv SG EE EE'
 < case Sec.

Subgoal 5.1.11:

Variables: SF SScope SG FE Scope EE Scope' EE' O I O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E (intVal I) (Scope'::EE') O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : level SF (SScope::SG) public E public
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.12:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E trueVal (Scope'::EE') O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 public_equiv SG EE EE'
 < case Sec.

Subgoal 5.1.12:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E trueVal (Scope'::EE') O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : level SF (SScope::SG) public E public
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.13:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E falseVal (Scope'::EE') O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 public_equiv SG EE EE'
 < case Sec.

Subgoal 5.1.13:

Variables: SF SScope SG FE Scope EE Scope' EE' O O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E falseVal (Scope'::EE') O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : level SF (SScope::SG) public E public
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.14:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O S1 O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) (Scope'::EE') O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 public_equiv SG EE EE'
 < case Sec.

Subgoal 5.1.14:

Variables: SF SScope SG FE Scope EE Scope' EE' O S1 O2 E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (printVal E) (Scope'::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) (Scope'::EE') O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : level SF (SScope::SG) public E public
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.1.15:

Variables: SF SScope SG PC SG' FE Scope EE EE' O Scope1 V X E Ty L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt (secdecl L Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE') O @
Sec : secure SF (SScope::SG) PC (secdecl L Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
============================
 public_equiv SG EE EE'
 < case IsS.

Subgoal 5.1.15:

Variables: SF SScope SG PC SG' FE Scope EE EE' O Scope1 V X E Ty L
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE') O @
Sec : secure SF (SScope::SG) PC (secdecl L Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.15.1:

Variables: SF SScope SG PC FE Scope EE EE' O Scope1 V X E Ty L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (SScope::SG) PC E L1
Sec1 : no_lookup SScope X
============================
 public_equiv SG EE EE'
 < PE: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.15.1:

Variables: SF SScope SG PC FE Scope EE EE' O Scope1 V X E Ty L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (SScope::SG) PC E L1
Sec1 : no_lookup SScope X
PE : public_equiv (SScope::SG) (Scope::EE) (Scope1::EE')
============================
 public_equiv SG EE EE'
 < case PE.

Subgoal 5.1.15.1:

Variables: SF SScope SG PC FE Scope EE EE' O Scope1 V X E Ty L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE') O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (SScope::SG) PC E L1
Sec1 : no_lookup SScope X
H5 : forall X V, lookup SScope X public -> lookup Scope X V -> lookup Scope1 X V
H6 : forall X V, lookup SScope X public -> lookup Scope1 X V -> lookup Scope X V
H7 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.15.2:

Variables: SF SScope SG FE Scope EE EE' O Scope1 V X E Ty
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (SScope::SG) public E public
Sec1 : no_lookup SScope X
============================
 public_equiv SG EE EE'
 < PE: apply IH_E to _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.15.2:

Variables: SF SScope SG FE Scope EE EE' O Scope1 V X E Ty
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (SScope::SG) public E public
Sec1 : no_lookup SScope X
PE : public_equiv (SScope::SG) (Scope::EE) (Scope1::EE')
============================
 public_equiv SG EE EE'
 < case PE.

Subgoal 5.1.15.2:

Variables: SF SScope SG FE Scope EE EE' O Scope1 V X E Ty
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE') O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE') O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (SScope::SG) public E public
Sec1 : no_lookup SScope X
H5 : forall X V, lookup SScope X public -> lookup Scope X V -> lookup Scope1 X V
H6 : forall X V, lookup SScope X public -> lookup Scope1 X V -> lookup Scope X V
H7 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.1.16:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
Sec : secure SF (SScope::SG) PC <unknown K evalStmt> SG'
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
============================
 public_equiv SG EE EE'
 < Sec: case Sec.

Subgoal 5.1.16:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
============================
 public_equiv SG EE EE'
 < apply names_is to _ Ev1.

Subgoal 5.1.16:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
============================
 public_equiv SG EE EE'
 < apply names_is_sec to _ Sec.

Subgoal 5.1.16:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG EE EE'
 < apply proj_stmt_unique to Sec1 Ev2 _ _ _ _ _.

Subgoal 5.1.16.1:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.1.16.1:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NS Ev1 Sec M.

Subgoal 5.1.16.1:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.1.16.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.1.16.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NS Ev1 Sec M.

Subgoal 5.1.16.2:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF (SScope::SG) PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.1.16:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG EE EE'
 < apply proj_stmt_is to Sec1 _ _.

Subgoal 5.1.16:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
============================
 public_equiv SG EE EE'
 < NS': apply secure_eval_names_same to _ _ _ _ _ _ Ev3 Sec2.

Subgoal 5.1.16:

Variables: SF SScope SG PC SG' FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
============================
 public_equiv SG EE EE'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.1.16:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Names S_P EE_P O_P Names1 Scope'1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P (Scope'1::SG)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P (Scope'1::SG)
H4 : forall X L, lookup SScope X L -> lookup Scope'1 X L
============================
 public_equiv SG EE EE'
 < case NS' (keep).

Subgoal 5.1.16:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Names S_P O_P Names1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P (Scope'1::SG)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X L, lookup SScope X L -> lookup Scope'1 X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H6 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
============================
 public_equiv SG EE EE'
 < PE: apply IH_S to _ _ _ _ _ _ _ Ev3 Sec2 _.

Subgoal 5.1.16:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Names S_P O_P Names1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P (Scope'1::SG)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X L, lookup SScope X L -> lookup Scope'1 X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H6 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE : public_equiv SG EE ARest
============================
 public_equiv SG EE EE'
 < SS: apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.1.16:

Variables: SF SScope SG PC FE Scope EE Scope' EE' O Names S_P O_P Names1 Scope'1 ARest A EE''
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P (Scope'1::SG)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X L, lookup SScope X L -> lookup Scope'1 X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H6 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE : public_equiv SG EE ARest
SS : evalStmt FE (Scope::EE) S_P EE'' O
SS1 : scopes_same (Scope'::EE') EE''
============================
 public_equiv SG EE EE'
 < apply evalStmt_unique to _ _ _ SS Ev3.

Subgoal 5.1.16:

Variables: SF SScope SG PC FE Scope EE Scope' EE' Names S_P O_P Names1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O_P @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P (Scope'1::SG)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X L, lookup SScope X L -> lookup Scope'1 X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H6 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE : public_equiv SG EE ARest
SS : evalStmt FE (Scope::EE) S_P (A::ARest) O_P
SS1 : scopes_same (Scope'::EE') (A::ARest)
============================
 public_equiv SG EE EE'
 < SS': case SS1.

Subgoal 5.1.16:

Variables: SF SScope SG PC FE Scope EE Scope' EE' Names S_P O_P Names1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O_P @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P (Scope'1::SG)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X L, lookup SScope X L -> lookup Scope'1 X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H6 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE : public_equiv SG EE ARest
SS : evalStmt FE (Scope::EE) S_P (A::ARest) O_P
SS' : forall X V, lookup Scope' X V -> lookup A X V
SS'1 : forall X V, lookup A X V -> lookup Scope' X V
SS'2 : scopes_same EE' ARest
============================
 public_equiv SG EE EE'
 < apply public_equiv_scopes_same_snd to PE SS'2.

Subgoal 5.1.16:

Variables: SF SScope SG PC FE Scope EE Scope' EE' Names S_P O_P Names1 Scope'1 ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (SScope::SG)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
NS : names_same (Scope::EE) (SScope::SG)
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> (Scope'::EE') O_P @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) O_P *
Sec : names (SScope::SG) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (SScope::SG) PC S_P (Scope'1::SG)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'1::SG)
H4 : forall X L, lookup SScope X L -> lookup Scope'1 X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'1
H6 : forall X IB, mem (X, IB) Scope'1 -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE : public_equiv SG EE ARest
SS : evalStmt FE (Scope::EE) S_P (A::ARest) O_P
SS' : forall X V, lookup Scope' X V -> lookup A X V
SS'1 : forall X V, lookup A X V -> lookup Scope' X V
SS'2 : scopes_same EE' ARest
H8 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.1:

Variables: SF SG PC L FE EE' I
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
Lev : level SF SG PC (num I) L
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (plus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (plus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (minus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (minus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (mult E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (mult E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (div E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (div E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.6:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' true trueVal EE' [] @
Lev : level SF SG PC true L
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.2.7:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' false falseVal EE' [] @
Lev : level SF SG PC false L
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 public_equiv SG EE EE'
 < apply join_is to _ _ Lev1.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.8.1:

Variables: SF SG L FE EE EE' O EE3 O2 O3 E2 E1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
H7 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 public_equiv SG EE EE'
 < apply join_is to _ _ Lev1.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.10.1:

Variables: SF SG L FE EE EE' O EE3 O2 O3 E2 E1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
H7 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 public_equiv SG EE EE'
 < apply join_is to _ _ Lev1.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.12.1:

Variables: SF SG L FE EE EE' O EE3 O2 O3 E2 E1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
H7 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 public_equiv SG EE EE'
 < apply join_is to _ _ Lev1.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.13.1:

Variables: SF SG L FE EE EE' O EE3 O2 O3 E2 E1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
PE2 : public_equiv SG EE3 EE'
H7 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 public_equiv SG EE EE'
 < apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
H2 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 public_equiv SG EE EE'
 < apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
H2 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.20:

Variables: SF SG PC L FE EE' S
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
Lev : level SF SG PC (stringLit S) L
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Lev : level SF SG PC (appString E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Lev : level SF SG PC (appString E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.22:

Variables: SF SG PC L FE V EE' X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalExpr FE EE' (name X) V EE' [] @
Lev : level SF SG PC (name X) L
NEq : PC = public -> false
Ev1 : lookupScopes X EE' V
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.2.23:

Variables: SF SG PC L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Lev : level SF SG PC (call Fun Args) L
NEq : PC = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.23:

Variables: SF SG PC L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Lev : level SF SG PC (call Fun Args) L
NEq : PC = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 public_equiv SG EE EE'
 < apply IH_A to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : public = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
============================
 public_equiv SG EE EE'
 < apply NEq to _.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Lev : level SF SG PC (stmtExpr S E1) L
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Lev : level SF SG PC (stmtExpr S E1) L
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
============================
 public_equiv SG EE EE'
 < apply names_same_add_scope to NS.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
============================
 public_equiv SG EE EE'
 < NS': apply secure_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same EE3 SG2
============================
 public_equiv SG EE EE'
 < apply secure_older_scopes to _ _ _ Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S Scope'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same EE3 (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 public_equiv SG EE EE'
 < case NS' (keep).

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O O2 Scope O3 E1 S Scope' ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S (A::ARest) O2 *
Ev2 : evalExpr FE (A::ARest) E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same (A::ARest) (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H6 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
============================
 public_equiv SG EE EE'
 < PE1: apply IH_S to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O O2 Scope O3 E1 S Scope' ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S (A::ARest) O2 *
Ev2 : evalExpr FE (A::ARest) E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same (A::ARest) (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H6 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE1 : public_equiv SG EE ARest
============================
 public_equiv SG EE EE'
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O O2 Scope O3 E1 S Scope' ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S (A::ARest) O2 *
Ev2 : evalExpr FE (A::ARest) E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same (A::ARest) (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H6 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H8 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
============================
 public_equiv SG EE EE'
 < apply secure_is to _ _ _ Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O O2 Scope O3 E1 S Scope' ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S (A::ARest) O2 *
Ev2 : evalExpr FE (A::ARest) E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same (A::ARest) (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H6 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H8 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H9 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
============================
 public_equiv SG EE EE'
 < PE2: apply IH_E to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O O2 Scope O3 E1 S Scope' ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S (A::ARest) O2 *
Ev2 : evalExpr FE (A::ARest) E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same (A::ARest) (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H6 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H8 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H9 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
PE2 : public_equiv (Scope'::SG) (A::ARest) (Scope::EE')
============================
 public_equiv SG EE EE'
 < PE': case PE2.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O O2 Scope O3 E1 S Scope' ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S (A::ARest) O2 *
Ev2 : evalExpr FE (A::ARest) E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same (A::ARest) (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H6 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H8 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H9 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
PE' : forall X V, lookup Scope' X public -> lookup A X V -> lookup Scope X V
PE'1 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup A X V
PE'2 : public_equiv SG ARest EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE'2.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O O2 Scope O3 E1 S Scope' ARest A
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S (A::ARest) O2 *
Ev2 : evalExpr FE (A::ARest) E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE) ([]::SG)
NS' : names_same (A::ARest) (Scope'::SG)
H4 : forall X L, lookup [] X L -> lookup Scope' X L
H5 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H6 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H7 : names_same ARest SG
PE1 : public_equiv SG EE ARest
H8 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H9 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
PE' : forall X V, lookup Scope' X public -> lookup A X V -> lookup Scope X V
PE'1 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup A X V
PE'2 : public_equiv SG ARest EE'
H10 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (recBuild RF)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Lev : level SF SG PC (recBuild RF) L
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' O *
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Lev : level SF SG PC (recBuild RF) L
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
============================
 public_equiv SG EE EE'
 < apply IH_RF to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
H2 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr (recFieldAccess Rec F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Lev : level SF SG PC (recFieldAccess Rec F) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
============================
 public_equiv SG EE EE'
 < case IsE.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Lev : level SF SG PC (recFieldAccess Rec F) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
============================
 public_equiv SG EE EE'
 < apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
H3 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Lev : level SF SG PC <unknown K evalExpr> L
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
============================
 public_equiv SG EE EE'
 < apply names_is to _ Ev1.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
============================
 public_equiv SG EE EE'
 < apply names_is_sec to _ Lev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG EE EE'
 < apply proj_expr_unique to Lev1 Ev2 _ _ _ _ _.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NS Ev1 Lev M.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NS Ev1 Lev M.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG EE EE'
 < apply proj_expr_is to Lev1 _ _.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
============================
 public_equiv SG EE EE'
 < PE: apply IH_E to _ _ _ _ _ _ _ Ev3 Lev2 _.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
PE : public_equiv SG EE EE_P
============================
 public_equiv SG EE EE'
 < SS: apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 EE''
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
PE : public_equiv SG EE EE_P
SS : evalExpr FE EE E_P V EE'' O
SS1 : scopes_same EE' EE''
============================
 public_equiv SG EE EE'
 < apply evalExpr_unique to _ _ _ SS Ev3.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
PE : public_equiv SG EE EE_P
SS : evalExpr FE EE E_P V_P EE_P O_P
SS1 : scopes_same EE' EE_P
============================
 public_equiv SG EE EE'
 < apply public_equiv_scopes_same_snd to PE SS1.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
PE : public_equiv SG EE EE_P
SS : evalExpr FE EE E_P V_P EE_P O_P
SS1 : scopes_same EE' EE_P
H4 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.3.1:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalArgs FE EE' nilArgs [] EE' [] @
Lev : levelArgs SF SG PC nilArgs L
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsA : is_args (consArgs E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Lev : levelArgs SF SG PC (consArgs E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsA.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Lev : levelArgs SF SG PC (consArgs E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_A to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
PE1 : public_equiv SG EE EE3
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H5 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.3.3:

Variables: SF SG PC L FE EE V EE' O
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsA : is_args <unknown K evalArgs>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
Lev : levelArgs SF SG PC <unknown K evalArgs> L
NEq : PC = public -> false
============================
 public_equiv SG EE EE'
 < case Lev.

Subgoal 5.4.1:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
NS : names_same EE' SG
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
Lev : levelRecFields SF SG PC nilRecFieldExprs L
NEq : PC = public -> false
============================
 public_equiv SG EE' EE'
 < backchain public_equiv_refl.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 public_equiv SG EE EE'
 < case IsRF.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 public_equiv SG EE EE'
 < Lev: case Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
============================
 public_equiv SG EE EE'
 < PE1: apply IH_E to _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
PE1 : public_equiv SG EE EE3
============================
 public_equiv SG EE EE'
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
PE1 : public_equiv SG EE EE3
H4 : names_same EE3 SG
============================
 public_equiv SG EE EE'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
PE1 : public_equiv SG EE EE3
H4 : names_same EE3 SG
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG EE EE'
 < PE2: apply IH_RF to _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
PE1 : public_equiv SG EE EE3
H4 : names_same EE3 SG
H5 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
============================
 public_equiv SG EE EE'
 < apply public_equiv_trans to PE1 PE2.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
PE1 : public_equiv SG EE EE3
H4 : names_same EE3 SG
H5 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv SG EE3 EE'
H6 : public_equiv SG EE EE'
============================
 public_equiv SG EE EE'
 < search.

Subgoal 5.4.3:

Variables: SF SG PC L FE EE V EE' O
IH_S : forall S SF SScope SG PC SG' FE Scope EE Scope' EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) (SScope::SG) -> is_slev PC ->
         is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> names_same (Scope::EE) (SScope::SG) ->
         evalStmt FE (Scope::EE) S (Scope'::EE') O * -> secure SF (SScope::SG) PC S SG' ->
         (PC = public -> false) -> public_equiv SG EE EE'
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalExpr FE EE E V EE' O * -> level SF SG PC E L -> (PC = public -> false) ->
         public_equiv SG EE EE'
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
         evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L -> (PC = public ->
         false) -> public_equiv SG EE EE'
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG ->
          evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L -> (PC = public ->
          false) -> public_equiv SG EE EE'
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
Lev : levelRecFields SF SG PC <unknown K evalRecFields> L
NEq : PC = public -> false
============================
 public_equiv SG EE EE'
 < case Lev.

Proof completed.
 < Theorem while_no_public_change :
     forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O ->
       public_equiv SG EE EE2.

============================
 forall SF SG PC SG' L Cond Body FE EE EE2 O,
   is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
   is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
   is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
   level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O ->
   public_equiv SG EE EE2
 < induction on 12.

IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
============================
 forall SF SG PC SG' L Cond Body FE EE EE2 O,
   is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
   is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
   is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
   level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O @ ->
   public_equiv SG EE EE2
 < intros IsC IsB IsSF IsSG IsPC IsFE IsEE NS Sec Lev NEq Ev.

Variables: SF SG PC SG' L Cond Body FE EE EE2 O
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Sec : secure SF SG PC (while Cond Body) SG'
Lev : level SF SG PC Cond L
NEq : L = public -> false
Ev : evalStmt FE EE (while Cond Body) EE2 O @
============================
 public_equiv SG EE EE2
 < Ev: case Ev.

Subgoal 1:

Variables: SF SG PC SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Sec : secure SF SG PC (while Cond Body) SG'
Lev : level SF SG PC Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
============================
 public_equiv SG EE EE2
 < Sec: case Sec (keep).

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 L1 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L1
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 public_equiv SG' EE EE2
 < apply level_unique to _ _ _ _ Sec1 Lev.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 public_equiv SG' EE EE2
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev Lev.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
============================
 public_equiv SG' EE EE2
 < apply names_same_add_scope to NS'.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
============================
 public_equiv SG' EE EE2
 < PE1: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ Ev Sec1 _.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
============================
 public_equiv SG' EE EE2
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE EE2
 < PE2: apply stmt_not_public_no_public_change to _ _ _ _ _ _ _ Ev1 Sec2 _.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
============================
 public_equiv SG' EE EE2
 < PE3: apply public_equiv_trans to PE1 PE2.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
============================
 public_equiv SG' EE EE2
 < NS'': apply secure_eval_names_same to _ _ _ _ _ _ Ev1 Sec2.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
NS'' : names_same (Scope::EE4) (Scope1::SG2)
============================
 public_equiv SG' EE EE2
 < case NS''.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
H3 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope1
H4 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope
H5 : names_same EE4 SG2
============================
 public_equiv SG' EE EE2
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope'
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
H3 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
H4 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
H5 : names_same EE4 SG'
H6 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 public_equiv SG' EE EE2
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope'
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
H3 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
H4 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
H5 : names_same EE4 SG'
H6 : forall X L, lookup [] X L -> lookup Scope' X L
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE4)
============================
 public_equiv SG' EE EE2
 < case IsEE4+.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope'
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
H3 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
H4 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
H5 : names_same EE4 SG'
H6 : forall X L, lookup [] X L -> lookup Scope' X L
H7 : is_list (is_pair is_string is_value) Scope
H8 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 public_equiv SG' EE EE2
 < PE4: apply IH to _ _ _ _ _ _ _ _ Sec Lev _ Ev2.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope'
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
H3 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
H4 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
H5 : names_same EE4 SG'
H6 : forall X L, lookup [] X L -> lookup Scope' X L
H7 : is_list (is_pair is_string is_value) Scope
H8 : is_list (is_list (is_pair is_string is_value)) EE4
PE4 : public_equiv SG' EE4 EE2
============================
 public_equiv SG' EE EE2
 < apply public_equiv_trans to PE3 PE4.

Subgoal 1.1:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope'
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
NS' : names_same EE1 SG'
H1 : names_same ([]::EE1) ([]::SG')
PE1 : public_equiv SG' EE EE1
H2 : is_list (is_list (is_pair is_string is_value)) EE1
PE2 : public_equiv SG' EE1 EE4
PE3 : public_equiv SG' EE EE4
H3 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
H4 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
H5 : names_same EE4 SG'
H6 : forall X L, lookup [] X L -> lookup Scope' X L
H7 : is_list (is_pair is_string is_value) Scope
H8 : is_list (is_list (is_pair is_string is_value)) EE4
PE4 : public_equiv SG' EE4 EE2
H9 : public_equiv SG' EE EE2
============================
 public_equiv SG' EE EE2
 < search.

Subgoal 1.2:

Variables: SF SG' L Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' public (while Cond Body) SG'
Lev : level SF SG' public Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
============================
 public_equiv SG' EE EE2
 < apply level_unique to _ _ _ _ Sec1 Lev.

Subgoal 1.2:

Variables: SF SG' Cond Body FE EE EE2 O EE1 O2 Scope EE4 O3 O4 O12 Scope1 SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' public (while Cond Body) SG'
Lev : level SF SG' public Cond public
NEq : public = public -> false
Ev : evalExpr FE EE Cond trueVal EE1 O2 *
Ev1 : evalStmt FE ([]::EE1) Body (Scope::EE4) O3 *
Ev2 : evalStmt FE EE4 (while Cond Body) EE2 O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
============================
 public_equiv SG' EE EE2
 < apply NEq to _.

Subgoal 2:

Variables: SF SG PC SG' L Cond Body FE EE EE2 O
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG
Sec : secure SF SG PC (while Cond Body) SG'
Lev : level SF SG PC Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond falseVal EE2 O *
============================
 public_equiv SG EE EE2
 < Sec: case Sec (keep).

Subgoal 2.1:

Variables: SF SG' L Cond Body FE EE EE2 O L1 Scope SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond falseVal EE2 O *
Sec1 : level SF SG' private Cond L1
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
============================
 public_equiv SG' EE EE2
 < apply expr_not_public_no_public_change to _ _ _ _ _ _ _ Ev Sec1 _.

Subgoal 2.1:

Variables: SF SG' L Cond Body FE EE EE2 O L1 Scope SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' private (while Cond Body) SG'
Lev : level SF SG' private Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond falseVal EE2 O *
Sec1 : level SF SG' private Cond L1
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
H1 : public_equiv SG' EE EE2
============================
 public_equiv SG' EE EE2
 < search.

Subgoal 2.2:

Variables: SF SG' L Cond Body FE EE EE2 O Scope SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' public (while Cond Body) SG'
Lev : level SF SG' public Cond L
NEq : L = public -> false
Ev : evalExpr FE EE Cond falseVal EE2 O *
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
============================
 public_equiv SG' EE EE2
 < apply level_unique to _ _ _ _ Sec1 Lev.

Subgoal 2.2:

Variables: SF SG' Cond Body FE EE EE2 O Scope SG2
IH : forall SF SG PC SG' L Cond Body FE EE EE2 O,
       is_expr Cond -> is_stmt Body -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
       is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
       is_list (is_list (is_pair is_string is_value)) EE -> names_same EE SG -> secure SF SG PC (while Cond Body) SG' ->
       level SF SG PC Cond L -> (L = public -> false) -> evalStmt FE EE (while Cond Body) EE2 O * ->
       public_equiv SG EE EE2
IsC : is_expr Cond
IsB : is_stmt Body
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
NS : names_same EE SG'
Sec : secure SF SG' public (while Cond Body) SG'
Lev : level SF SG' public Cond public
NEq : public = public -> false
Ev : evalExpr FE EE Cond falseVal EE2 O *
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
============================
 public_equiv SG' EE EE2
 < apply NEq to _.

Proof completed.
 < Define level_arg_vals : (list slev) -> (list value) -> (list value) -> prop by
   level_arg_vals [] [] [];
   level_arg_vals (public::SRest) (V::ARest) (V::BRest) :=
     level_arg_vals SRest ARest BRest;
   level_arg_vals (L::SRest) (VA::ARest) (VB::BRest) :=
     (L = public -> false) /\ level_arg_vals SRest ARest BRest.


 < Theorem zip_level_arg_vals :
     forall S A B N ZA ZB ZS,
       level_arg_vals S A B -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB].

============================
 forall S A B N ZA ZB ZS,
   level_arg_vals S A B -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
 < induction on 1.

IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
============================
 forall S A B N ZA ZB ZS,
   level_arg_vals S A B @ -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
 < intros LAV ZA ZB ZS.

Variables: S A B N ZA ZB ZS
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals S A B @
ZA : zip N A ZA
ZB : zip N B ZB
ZS : zip N S ZS
============================
 public_equiv [ZS] [ZA] [ZB]
 < LAV: case LAV.

Subgoal 1:

Variables: N ZA ZB ZS
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZA : zip N [] ZA
ZB : zip N [] ZB
ZS : zip N [] ZS
============================
 public_equiv [ZS] [ZA] [ZB]
 < case ZA.

Subgoal 1:

Variables: ZB ZS
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZB : zip [] [] ZB
ZS : zip [] [] ZS
============================
 public_equiv [ZS] [[]] [ZB]
 < case ZB.

Subgoal 1:

Variables: ZS
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZS : zip [] [] ZS
============================
 public_equiv [ZS] [[]] [[]]
 < case ZS.

Subgoal 1:

IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
============================
 public_equiv [[]] [[]] [[]]
 < unfold .

Subgoal 1.1:

IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
============================
 forall X V, lookup [] X public -> lookup [] X V -> lookup [] X V
 < intros L.

Subgoal 1.1:

Variables: X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
L : lookup [] X public
H1 : lookup [] X V
============================
 lookup [] X V
 < case L.

Subgoal 1.2:

IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
============================
 forall X V, lookup [] X public -> lookup [] X V -> lookup [] X V
 < intros L.

Subgoal 1.2:

Variables: X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
L : lookup [] X public
H1 : lookup [] X V
============================
 lookup [] X V
 < case L.

Subgoal 1.3:

IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
============================
 public_equiv [] [] []
 < search.

Subgoal 2:

Variables: N ZA ZB ZS BRest V ARest SRest
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZA : zip N (V::ARest) ZA
ZB : zip N (V::BRest) ZB
ZS : zip N (public::SRest) ZS
LAV : level_arg_vals SRest ARest BRest *
============================
 public_equiv [ZS] [ZA] [ZB]
 < ZA: case ZA.

Subgoal 2:

Variables: ZB ZS BRest V ARest SRest Rest A1 ARest1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZB : zip (A1::ARest1) (V::BRest) ZB
ZS : zip (A1::ARest1) (public::SRest) ZS
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
============================
 public_equiv [ZS] [(A1, V)::Rest] [ZB]
 < ZB: case ZB.

Subgoal 2:

Variables: ZS BRest V ARest SRest Rest A1 ARest1 Rest1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZS : zip (A1::ARest1) (public::SRest) ZS
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
============================
 public_equiv [ZS] [(A1, V)::Rest] [(A1, V)::Rest1]
 < ZS: case ZS.

Subgoal 2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 public_equiv [(A1, public)::Rest2] [(A1, V)::Rest] [(A1, V)::Rest1]
 < unfold .

Subgoal 2.1:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 forall X V1,
   lookup ((A1, public)::Rest2) X public -> lookup ((A1, V)::Rest) X V1 -> lookup ((A1, V)::Rest1) X V1
 < intros LS LA.

Subgoal 2.1:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : lookup ((A1, public)::Rest2) X public
LA : lookup ((A1, V)::Rest) X V1
============================
 lookup ((A1, V)::Rest1) X V1
 < LS: case LS.

Subgoal 2.1.1:

Variables: BRest V ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LA : lookup ((X, V)::Rest) X V1
============================
 lookup ((X, V)::Rest1) X V1
 < LA: case LA.

Subgoal 2.1.1.1:

Variables: BRest ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 lookup ((X, V1)::Rest1) X V1
 < search.

Subgoal 2.1.1.2:

Variables: BRest V ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LA : X = X -> false
LA1 : lookup Rest X V1
============================
 lookup ((X, V)::Rest1) X V1
 < apply LA to _.

Subgoal 2.1.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LA : lookup ((A1, V)::Rest) X V1
LS : A1 = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((A1, V)::Rest1) X V1
 < LA: case LA.

Subgoal 2.1.2.1:

Variables: BRest ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : X = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((X, V1)::Rest1) X V1
 < apply LS to _.

Subgoal 2.1.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V1
============================
 lookup ((A1, V)::Rest1) X V1
 < PE: apply IH to LAV ZA ZB ZS.

Subgoal 2.1.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V1
PE : public_equiv [Rest2] [Rest] [Rest1]
============================
 lookup ((A1, V)::Rest1) X V1
 < PE: case PE.

Subgoal 2.1.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V1
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
============================
 lookup ((A1, V)::Rest1) X V1
 < apply PE to LS1 LA1.

Subgoal 2.1.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V1
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
H1 : lookup Rest1 X V1
============================
 lookup ((A1, V)::Rest1) X V1
 < search.

Subgoal 2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 forall X V1,
   lookup ((A1, public)::Rest2) X public -> lookup ((A1, V)::Rest1) X V1 -> lookup ((A1, V)::Rest) X V1
 < intros LS LB.

Subgoal 2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : lookup ((A1, public)::Rest2) X public
LB : lookup ((A1, V)::Rest1) X V1
============================
 lookup ((A1, V)::Rest) X V1
 < LS: case LS.

Subgoal 2.2.1:

Variables: BRest V ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LB : lookup ((X, V)::Rest1) X V1
============================
 lookup ((X, V)::Rest) X V1
 < LB: case LB.

Subgoal 2.2.1.1:

Variables: BRest ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 lookup ((X, V1)::Rest) X V1
 < search.

Subgoal 2.2.1.2:

Variables: BRest V ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LB : X = X -> false
LB1 : lookup Rest1 X V1
============================
 lookup ((X, V)::Rest) X V1
 < apply LB to _.

Subgoal 2.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LB : lookup ((A1, V)::Rest1) X V1
LS : A1 = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((A1, V)::Rest) X V1
 < LB: case LB.

Subgoal 2.2.2.1:

Variables: BRest ARest SRest Rest ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : X = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((X, V1)::Rest) X V1
 < apply LS to _.

Subgoal 2.2.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V1
============================
 lookup ((A1, V)::Rest) X V1
 < PE: apply IH to LAV ZA ZB ZS.

Subgoal 2.2.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V1
PE : public_equiv [Rest2] [Rest] [Rest1]
============================
 lookup ((A1, V)::Rest) X V1
 < PE: case PE.

Subgoal 2.2.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V1
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
============================
 lookup ((A1, V)::Rest) X V1
 < apply PE1 to LS1 LB1.

Subgoal 2.2.2.2:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2 X V1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V1
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
H1 : lookup Rest X V1
============================
 lookup ((A1, V)::Rest) X V1
 < search.

Subgoal 2.3:

Variables: BRest V ARest SRest Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 public_equiv [] [] []
 < search.

Subgoal 3:

Variables: N ZA ZB ZS BRest VB ARest VA SRest L
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZA : zip N (VA::ARest) ZA
ZB : zip N (VB::BRest) ZB
ZS : zip N (L::SRest) ZS
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
============================
 public_equiv [ZS] [ZA] [ZB]
 < ZA: case ZA.

Subgoal 3:

Variables: ZB ZS BRest VB ARest VA SRest L Rest A1 ARest1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZB : zip (A1::ARest1) (VB::BRest) ZB
ZS : zip (A1::ARest1) (L::SRest) ZS
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
============================
 public_equiv [ZS] [(A1, VA)::Rest] [ZB]
 < ZB: case ZB.

Subgoal 3:

Variables: ZS BRest VB ARest VA SRest L Rest A1 ARest1 Rest1
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
ZS : zip (A1::ARest1) (L::SRest) ZS
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
============================
 public_equiv [ZS] [(A1, VA)::Rest] [(A1, VB)::Rest1]
 < ZS: case ZS.

Subgoal 3:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 public_equiv [(A1, L)::Rest2] [(A1, VA)::Rest] [(A1, VB)::Rest1]
 < unfold .

Subgoal 3.1:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 forall X V,
   lookup ((A1, L)::Rest2) X public -> lookup ((A1, VA)::Rest) X V -> lookup ((A1, VB)::Rest1) X V
 < intros LS LA.

Subgoal 3.1:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : lookup ((A1, L)::Rest2) X public
LA : lookup ((A1, VA)::Rest) X V
============================
 lookup ((A1, VB)::Rest1) X V
 < LS: case LS.

Subgoal 3.1.1:

Variables: BRest VB ARest VA SRest Rest ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : public = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LA : lookup ((X, VA)::Rest) X V
============================
 lookup ((X, VB)::Rest1) X V
 < apply LAV to _.

Subgoal 3.1.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LA : lookup ((A1, VA)::Rest) X V
LS : A1 = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((A1, VB)::Rest1) X V
 < LA: case LA.

Subgoal 3.1.2.1:

Variables: BRest VB ARest SRest L Rest ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : X = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((X, VB)::Rest1) X V
 < apply LS to _.

Subgoal 3.1.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V
============================
 lookup ((A1, VB)::Rest1) X V
 < PE: apply IH to LAV1 ZA ZB ZS.

Subgoal 3.1.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V
PE : public_equiv [Rest2] [Rest] [Rest1]
============================
 lookup ((A1, VB)::Rest1) X V
 < PE: case PE.

Subgoal 3.1.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
============================
 lookup ((A1, VB)::Rest1) X V
 < apply PE to LS1 LA1.

Subgoal 3.1.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LA : A1 = X -> false
LA1 : lookup Rest X V
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
H1 : lookup Rest1 X V
============================
 lookup ((A1, VB)::Rest1) X V
 < search.

Subgoal 3.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 forall X V,
   lookup ((A1, L)::Rest2) X public -> lookup ((A1, VB)::Rest1) X V -> lookup ((A1, VA)::Rest) X V
 < intros LS LB.

Subgoal 3.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : lookup ((A1, L)::Rest2) X public
LB : lookup ((A1, VB)::Rest1) X V
============================
 lookup ((A1, VA)::Rest) X V
 < LS: case LS.

Subgoal 3.2.1:

Variables: BRest VB ARest VA SRest Rest ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : public = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LB : lookup ((X, VB)::Rest1) X V
============================
 lookup ((X, VA)::Rest) X V
 < apply LAV to _.

Subgoal 3.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LB : lookup ((A1, VB)::Rest1) X V
LS : A1 = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((A1, VA)::Rest) X V
 < LB: case LB.

Subgoal 3.2.2.1:

Variables: BRest ARest VA SRest L Rest ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : X = X -> false
LS1 : lookup Rest2 X public
============================
 lookup ((X, VA)::Rest) X V
 < apply LS to _.

Subgoal 3.2.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V
============================
 lookup ((A1, VA)::Rest) X V
 < PE: apply IH to LAV1 ZA ZB ZS.

Subgoal 3.2.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V
PE : public_equiv [Rest2] [Rest] [Rest1]
============================
 lookup ((A1, VA)::Rest) X V
 < PE: case PE.

Subgoal 3.2.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
============================
 lookup ((A1, VA)::Rest) X V
 < apply PE1 to LS1 LB1.

Subgoal 3.2.2.2:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2 X V
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
LS : A1 = X -> false
LS1 : lookup Rest2 X public
LB : A1 = X -> false
LB1 : lookup Rest1 X V
PE : forall X V, lookup Rest2 X public -> lookup Rest X V -> lookup Rest1 X V
PE1 : forall X V, lookup Rest2 X public -> lookup Rest1 X V -> lookup Rest X V
PE2 : public_equiv [] [] []
H1 : lookup Rest X V
============================
 lookup ((A1, VA)::Rest) X V
 < search.

Subgoal 3.3:

Variables: BRest VB ARest VA SRest L Rest A1 ARest1 Rest1 Rest2
IH : forall S A B N ZA ZB ZS,
       level_arg_vals S A B * -> zip N A ZA -> zip N B ZB -> zip N S ZS -> public_equiv [ZS] [ZA] [ZB]
LAV : L = public -> false
LAV1 : level_arg_vals SRest ARest BRest *
ZA : zip ARest1 ARest Rest
ZB : zip ARest1 BRest Rest1
ZS : zip ARest1 SRest Rest2
============================
 public_equiv [] [] []
 < search.

Proof completed.
 < Theorem zip_is_sec :
     forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z -> is_list (is_pair is_string is_slev) Z.

============================
 forall A B Z,
   is_list is_string A -> is_list is_slev B -> zip A B Z -> is_list (is_pair is_string is_slev) Z
 < induction on 3.

IH : forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z * -> is_list (is_pair is_string is_slev) Z
============================
 forall A B Z,
   is_list is_string A -> is_list is_slev B -> zip A B Z @ -> is_list (is_pair is_string is_slev) Z
 < intros IsA IsB Z.

Variables: A B Z
IH : forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z * -> is_list (is_pair is_string is_slev) Z
IsA : is_list is_string A
IsB : is_list is_slev B
Z : zip A B Z @
============================
 is_list (is_pair is_string is_slev) Z
 < Z: case Z.

Subgoal 1:

IH : forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z * -> is_list (is_pair is_string is_slev) Z
IsA : is_list is_string []
IsB : is_list is_slev []
============================
 is_list (is_pair is_string is_slev) []
 < search.

Subgoal 2:

Variables: Rest B1 A1 BRest ARest
IH : forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z * -> is_list (is_pair is_string is_slev) Z
IsA : is_list is_string (A1::ARest)
IsB : is_list is_slev (B1::BRest)
Z : zip ARest BRest Rest *
============================
 is_list (is_pair is_string is_slev) ((A1, B1)::Rest)
 < case IsA.

Subgoal 2:

Variables: Rest B1 A1 BRest ARest
IH : forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z * -> is_list (is_pair is_string is_slev) Z
IsB : is_list is_slev (B1::BRest)
Z : zip ARest BRest Rest *
H1 : is_string A1
H2 : is_list is_string ARest
============================
 is_list (is_pair is_string is_slev) ((A1, B1)::Rest)
 < case IsB.

Subgoal 2:

Variables: Rest B1 A1 BRest ARest
IH : forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z * -> is_list (is_pair is_string is_slev) Z
Z : zip ARest BRest Rest *
H1 : is_string A1
H2 : is_list is_string ARest
H3 : is_slev B1
H4 : is_list is_slev BRest
============================
 is_list (is_pair is_string is_slev) ((A1, B1)::Rest)
 < apply IH to _ _ Z.

Subgoal 2:

Variables: Rest B1 A1 BRest ARest
IH : forall A B Z,
       is_list is_string A -> is_list is_slev B -> zip A B Z * -> is_list (is_pair is_string is_slev) Z
Z : zip ARest BRest Rest *
H1 : is_string A1
H2 : is_list is_string ARest
H3 : is_slev B1
H4 : is_list is_slev BRest
H5 : is_list (is_pair is_string is_slev) Rest
============================
 is_list (is_pair is_string is_slev) ((A1, B1)::Rest)
 < search.

Proof completed.
 < Define secFunCtxs :
             (list (pair (string) (pair slev (list slev)))) ->
             (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) ->
             prop by
   secFunCtxs SF FE :=
     forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, RVVal, PNames, Body) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG.


 < Extensible_Theorem
      stmt_secure : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same (ScopeA::EE_A) SG ->
         NSB : names_same (ScopeB::EE_B) SG ->
         PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) ->
         Sec : secure SF SG PC S SG' ->
         EvA : evalStmt FE (ScopeA::EE_A) S EE_A' OA ->
         EvB : evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
      on EvA as IH_S,
      expr_secure : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : level SF SG PC E L ->
         EvA : evalExpr FE EE_A E VA EE_A' OA ->
         EvB : evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
      on EvA as IH_E,
      args_secure : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : levelArgs SF SG PC A L ->
         EvA : evalArgs FE EE_A A VA EE_A' OA ->
         EvB : evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
      on EvA as IH_A,
      recFields_secure : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : levelRecFields SF SG PC RF L ->
         EvA : evalRecFields FE EE_A RF VA EE_A' OA ->
         EvB : evalRecFields FE EE_B RF VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
      on EvA as IH_RF,
      expr_level : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : level SF SG PC E public ->
         EvA : evalExpr FE EE_A E VA EE_A' OA ->
         EvB : evalExpr FE EE_B E VB EE_B' OB ->
         VA = VB
      on EvA as IH_E_L,
      recFields_level : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : levelRecFields SF SG PC RF public ->
         EvA : evalRecFields FE EE_A RF VA EE_A' OA ->
         EvB : evalRecFields FE EE_B RF VB EE_B' OB ->
         VA = VB
      on EvA as IH_RF_L,
      args_level : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : levelArgs SF SG PC A Ls ->
         EvA : evalArgs FE EE_A A VA EE_A' OA ->
         EvB : evalArgs FE EE_B A VB EE_B' OB ->
         level_arg_vals Ls VA VB
      on EvA as IH_A_L.

Subgoal 1:

Variables: S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB
IsS : is_stmt S
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC S SG'
EvA : evalStmt FE (ScopeA::EE_A) S EE_A' OA
EvB : evalStmt FE (ScopeB::EE_B) S EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) /\ is_stmt S)
 < search.

Subgoal 2:

Variables: E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsE : is_expr E
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC E L
EvA : evalExpr FE EE_A E VA EE_A' OA
EvB : evalExpr FE EE_B E VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_expr E)
 < search.

Subgoal 3:

Variables: A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC A L
EvA : evalArgs FE EE_A A VA EE_A' OA
EvB : evalArgs FE EE_B A VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_args A)
 < search.

Subgoal 4:

Variables: RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC RF L
EvA : evalRecFields FE EE_A RF VA EE_A' OA
EvB : evalRecFields FE EE_B RF VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_recFieldExprs RF)
 < search.

Subgoal 5:

Variables: E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsE : is_expr E
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC E public
EvA : evalExpr FE EE_A E VA EE_A' OA
EvB : evalExpr FE EE_B E VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_expr E)
 < search.

Subgoal 6:

Variables: RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC RF public
EvA : evalRecFields FE EE_A RF VA EE_A' OA
EvB : evalRecFields FE EE_B RF VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_recFieldExprs RF)
 < search.

Subgoal 7:

Variables: A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC A Ls
EvA : evalArgs FE EE_A A VA EE_A' OA
EvB : evalArgs FE EE_B A VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_args A)
 < search.

Subgoal 8.1.1:

Variables: SF SG PC SG' FE ScopeA EE_A ScopeB EE_B EE_B' OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC noop SG'
EvA : evalStmt FE (ScopeA::EE_A) noop (ScopeA::EE_A) [] @
EvB : evalStmt FE (ScopeB::EE_B) noop EE_B' OB
============================
 public_equiv SG' (ScopeA::EE_A) EE_B'
 < case EvB.

Subgoal 8.1.1:

Variables: SF SG PC SG' FE ScopeA EE_A ScopeB EE_B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC noop SG'
EvA : evalStmt FE (ScopeA::EE_A) noop (ScopeA::EE_A) [] @
============================
 public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
 < case Sec.

Subgoal 8.1.1:

Variables: SF PC SG' FE ScopeA EE_A ScopeB EE_B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) noop (ScopeA::EE_A) [] @
============================
 public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
 < search.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (seq S1 S2) SG'
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (seq S1 S2) EE_B' OB
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (seq S1 S2) SG'
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (seq S1 S2) EE_B' OB
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (seq S1 S2) EE_B' OB
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < PE1: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG3 EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalStmt_isCtx to _ _ _ EvA1.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG3 EE1 EE2
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalStmt_isCtx to _ _ _ EvB.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG3 EE1 EE2
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply secure_is to _ _ _ Sec.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG3 EE1 EE2
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_slev)) SG3
============================
 public_equiv SG' EE_A' EE_B'
 < NSA': apply secure_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG3 EE1 EE2
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_slev)) SG3
NSA' : names_same EE1 SG3
============================
 public_equiv SG' EE_A' EE_B'
 < NSB': apply secure_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG3 EE1 EE2
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_slev)) SG3
NSA' : names_same EE1 SG3
NSB' : names_same EE2 SG3
============================
 public_equiv SG' EE_A' EE_B'
 < case NSA.

Subgoal 8.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4 BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG3 EE1 EE2
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_slev)) SG3
NSA' : names_same EE1 SG3
NSB' : names_same EE2 SG3
H6 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H8 : names_same EE_A BRest
============================
 public_equiv SG' EE_A' EE_B'
 < apply secure_older_scopes to _ _ _ Sec.

Subgoal 8.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 EE2 O3 O4 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv (Scope'::BRest) EE1 EE2
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same EE1 (Scope'::BRest)
NSB' : names_same EE2 (Scope'::BRest)
H6 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H8 : names_same EE_A BRest
H9 : forall X L, lookup B X L -> lookup Scope' X L
============================
 public_equiv SG' EE_A' EE_B'
 < case NSA' (keep).

Subgoal 8.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 O2 S2 S1 EE2 O3 O4 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O1 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv (Scope'::BRest) (A::ARest) EE2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same EE2 (Scope'::BRest)
H6 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H8 : names_same EE_A BRest
H9 : forall X L, lookup B X L -> lookup Scope' X L
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H11 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
============================
 public_equiv SG' EE_A' EE_B'
 < case NSB.

Subgoal 8.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 O2 S2 S1 EE2 O3 O4 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O1 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv (Scope'::BRest) (A::ARest) EE2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same EE2 (Scope'::BRest)
H6 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H8 : names_same EE_A BRest
H9 : forall X L, lookup B X L -> lookup Scope' X L
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H11 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H15 : names_same EE_B BRest
============================
 public_equiv SG' EE_A' EE_B'
 < case NSB' (keep).

Subgoal 8.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 O2 S2 S1 O3 O4 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O1 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 (A1::ARest1) O3
EvB1 : evalStmt FE (A1::ARest1) S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv (Scope'::BRest) (A::ARest) (A1::ARest1)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H5 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same (A1::ARest1) (Scope'::BRest)
H6 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H8 : names_same EE_A BRest
H9 : forall X L, lookup B X L -> lookup Scope' X L
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H11 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H15 : names_same EE_B BRest
H16 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) Scope'
H17 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A1
H18 : names_same ARest1 BRest
============================
 public_equiv SG' EE_A' EE_B'
 < case PE1 (keep).

Subgoal 8.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 O2 S2 S1 O3 O4 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O1 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 (A1::ARest1) O3
EvB1 : evalStmt FE (A1::ARest1) S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv (Scope'::BRest) (A::ARest) (A1::ARest1)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H5 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same (A1::ARest1) (Scope'::BRest)
H6 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H8 : names_same EE_A BRest
H9 : forall X L, lookup B X L -> lookup Scope' X L
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H11 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H15 : names_same EE_B BRest
H16 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) Scope'
H17 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A1
H18 : names_same ARest1 BRest
H19 : forall X V, lookup Scope' X public -> lookup A X V -> lookup A1 X V
H20 : forall X V, lookup Scope' X public -> lookup A1 X V -> lookup A X V
H21 : public_equiv BRest ARest ARest1
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA2 EvB1.

Subgoal 8.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 O2 S2 S1 O3 O4 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O1 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 (A1::ARest1) O3
EvB1 : evalStmt FE (A1::ARest1) S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv (Scope'::BRest) (A::ARest) (A1::ARest1)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H5 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same (A1::ARest1) (Scope'::BRest)
H6 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H7 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H8 : names_same EE_A BRest
H9 : forall X L, lookup B X L -> lookup Scope' X L
H10 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H11 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H12 : names_same ARest BRest
H13 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H14 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H15 : names_same EE_B BRest
H16 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) Scope'
H17 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A1
H18 : names_same ARest1 BRest
H19 : forall X V, lookup Scope' X public -> lookup A X V -> lookup A1 X V
H20 : forall X V, lookup Scope' X public -> lookup A1 X V -> lookup A X V
H21 : public_equiv BRest ARest ARest1
H22 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.3:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (declare Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (declare Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
============================
 public_equiv SG' (((X, V)::Scope)::EE1) EE_B'
 < case IsS.

Subgoal 8.1.3:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (declare Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (declare Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 public_equiv SG' (((X, V)::Scope)::EE1) EE_B'
 < Sec: case Sec.

Subgoal 8.1.3:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty SG1 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (declare Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
============================
 public_equiv (((X, public)::Scope1)::SG1) (((X, V)::Scope)::EE1) EE_B'
 < EvB: case EvB.

Subgoal 8.1.3:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
============================
 public_equiv (((X, public)::Scope1)::SG1) (((X, V)::Scope)::EE1) (((X, V1)::Scope2)::EE2)
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.3:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
H4 : public_equiv (Scope1::SG1) (Scope::EE1) (Scope2::EE2)
============================
 public_equiv (((X, public)::Scope1)::SG1) (((X, V)::Scope)::EE1) (((X, V1)::Scope2)::EE2)
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.3:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope X E Ty SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V1)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
H4 : public_equiv (Scope1::SG1) (Scope::EE1) (Scope2::EE2)
============================
 public_equiv (((X, public)::Scope1)::SG1) (((X, V1)::Scope)::EE1) (((X, V1)::Scope2)::EE2)
 < backchain public_equiv_add_public.

Subgoal 8.1.4:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (assign X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (assign X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.4:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (assign X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (assign X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.4:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (assign X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
============================
 public_equiv SG' EE_A' EE_B'
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
PE' : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
PE' : public_equiv SG' EE1 EE2
H3 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
PE' : public_equiv SG' EE1 EE2
H3 : names_same EE1 SG'
H4 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_replaceScopes_other to PE' _ _ Sec1 _ EvA2 EvB1.

Subgoal 8.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
PE' : public_equiv SG' EE1 EE2
H3 : names_same EE1 SG'
H4 : names_same EE2 SG'
H5 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
============================
 public_equiv SG' EE_A' EE_B'
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
PE' : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
PE' : public_equiv SG' EE1 EE2
H3 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
PE' : public_equiv SG' EE1 EE2
H3 : names_same EE1 SG'
H4 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 EE1 OA *
EvA2 : replaceScopes X V1 EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
PE' : public_equiv SG' EE1 EE2
H3 : names_same EE1 SG'
H4 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_replaceScopes_public to PE' _ _ Sec1 EvA2 EvB1.

Subgoal 8.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 EE1 OA *
EvA2 : replaceScopes X V1 EE1 EE_A'
H1 : is_string X
H2 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
PE' : public_equiv SG' EE1 EE2
H3 : names_same EE1 SG'
H4 : names_same EE2 SG'
H5 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.5:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (recUpdate Rec Fields E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.5:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (recUpdate Rec Fields E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.5:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
============================
 public_equiv SG' EE_A' EE_B'
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
PE' : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_replaceScopes_other to PE' _ _ Sec1 _ EvA4 EvB3.

Subgoal 8.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
H6 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
============================
 public_equiv SG' EE_A' EE_B'
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V1 FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < LB: apply public_equiv_lookupScopes to PE _ _ _ Sec1 EvA2.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V1 FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
LB : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals)
============================
 public_equiv SG' EE_A' EE_B'
 < apply lookupScopes_unique to LB EvB1.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals1)
EvA3 : updateRecFields Fields V1 FieldVals1 NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
LB : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
============================
 public_equiv SG' EE_A' EE_B'
 < apply updateRecFields_unique to EvA3 EvB2.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals1)
EvA3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvA4 : replaceScopes Rec (recVal NewVals1) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
LB : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_replaceScopes_public to PE' _ _ Sec1 EvA4 EvB3.

Subgoal 8.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals1)
EvA3 : updateRecFields Fields V1 FieldVals1 NewVals1
EvA4 : replaceScopes Rec (recVal NewVals1) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
PE' : public_equiv SG' EE1 EE2
H4 : names_same EE1 SG'
H5 : names_same EE2 SG'
LB : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
H6 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.6:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.6:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.6:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_add_scope to PE1.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
============================
 public_equiv SG' EE_A' EE_B'
 < NSA1: apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSA1.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB1: apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSB1.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_is to _ _ _ Sec.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
============================
 public_equiv SG' EE_A' EE_B'
 < apply join_is to _ _ Sec1.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
============================
 public_equiv SG' EE_A' EE_B'
 < PE2: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA2 EvB1.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
PE2 : public_equiv SGT (Scope::EE_A') (Scope1::EE_B')
============================
 public_equiv SG' EE_A' EE_B'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGF EE2 O3 Scope1 O4 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th (Scope'::SG')
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
PE2 : public_equiv (Scope'::SG') (Scope::EE_A') (Scope1::EE_B')
H11 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 public_equiv SG' EE_A' EE_B'
 < case PE2.

Subgoal 8.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGF EE2 O3 Scope1 O4 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th (Scope'::SG')
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
H11 : forall X L, lookup [] X L -> lookup Scope' X L
H12 : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope1 X V
H13 : forall X V,
        lookup Scope' X public -> lookup Scope1 X V -> lookup Scope X V
H14 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < NSA1: apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSA1.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB1: apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSB1.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_is to _ _ _ Sec.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
============================
 public_equiv SG' EE_A' EE_B'
 < apply join_is to _ _ Sec1.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
============================
 public_equiv SG' EE_A' EE_B'
 < assert Sl1 = public -> false.

Subgoal 8.1.6.2.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.1.6.2.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.1.6.2.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev public
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 8.1.6.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev public
H9 : is_slev public
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
============================
 public_equiv SG' EE_A' EE_B'
 < PEA: apply stmt_not_public_no_public_change to _ _ _ _ _ _ _ EvA2 Sec2 _.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < PEB: apply stmt_not_public_no_public_change to _ _ _ _ _ _ _ EvB1 Sec3 _.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < PE1B: apply public_equiv_trans to PE' PEB.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < IsA+: apply evalStmt_isCtx to _ _ _ EvA2.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
IsA+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE_A')
============================
 public_equiv SG' EE_A' EE_B'
 < case IsA+.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < case IsEE_A.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
H13 : is_list (is_pair is_string is_value) ScopeA
H14 : is_list (is_list (is_pair is_string is_value)) EE_A
============================
 public_equiv SG' EE_A' EE_B'
 < PEA1: apply public_equiv_symm to PEA.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
H13 : is_list (is_pair is_string is_value) ScopeA
H14 : is_list (is_list (is_pair is_string is_value)) EE_A
PEA1 : public_equiv SG' EE_A' EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_trans to PEA1 PE1B.

Subgoal 8.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
H13 : is_list (is_pair is_string is_value) ScopeA
H14 : is_list (is_list (is_pair is_string is_value)) EE_A
PEA1 : public_equiv SG' EE_A' EE1
H15 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.7:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.7:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.7:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < NSA1: apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSA1.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB1: apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSB1.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_is to _ _ _ Sec.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
============================
 public_equiv SG' EE_A' EE_B'
 < apply join_is to _ _ Sec1.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
============================
 public_equiv SG' EE_A' EE_B'
 < assert Sl1 = public -> false.

Subgoal 8.1.7.1.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.1.7.1.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.1.7.1.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev public
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 8.1.7.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev public
H9 : is_slev public
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
============================
 public_equiv SG' EE_A' EE_B'
 < PEA: apply stmt_not_public_no_public_change to _ _ _ _ _ _ _ EvA2 Sec3 _.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < PEB: apply stmt_not_public_no_public_change to _ _ _ _ _ _ _ EvB1 Sec2 _.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < PE1B: apply public_equiv_trans to PE' PEB.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < IsA+: apply evalStmt_isCtx to _ _ _ EvA2.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
IsA+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE_A')
============================
 public_equiv SG' EE_A' EE_B'
 < case IsA+.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < case IsEE_A.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
H13 : is_list (is_pair is_string is_value) ScopeA
H14 : is_list (is_list (is_pair is_string is_value)) EE_A
============================
 public_equiv SG' EE_A' EE_B'
 < PEA1: apply public_equiv_symm to PEA.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
H13 : is_list (is_pair is_string is_value) ScopeA
H14 : is_list (is_list (is_pair is_string is_value)) EE_A
PEA1 : public_equiv SG' EE_A' EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_trans to PEA1 PE1B.

Subgoal 8.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H5 : names_same ([]::EE2) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : is_slev L
H9 : is_slev Sl1
H10 : Sl1 = public -> false
PEA : public_equiv SG' EE1 EE_A'
PEB : public_equiv SG' EE2 EE_B'
PE' : public_equiv SG' EE1 EE2
PE1B : public_equiv SG' EE1 EE_B'
H11 : is_list (is_pair is_string is_value) Scope
H12 : is_list (is_list (is_pair is_string is_value)) EE_A'
H13 : is_list (is_pair is_string is_value) ScopeA
H14 : is_list (is_list (is_pair is_string is_value)) EE_A
PEA1 : public_equiv SG' EE_A' EE1
H15 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_add_scope to PE1.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
============================
 public_equiv SG' EE_A' EE_B'
 < NSA1: apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSA1.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB1: apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSB1.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG' EE_A' EE_B'
 < apply level_is to _ _ _ Sec.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
============================
 public_equiv SG' EE_A' EE_B'
 < apply join_is to _ _ Sec1.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
============================
 public_equiv SG' EE_A' EE_B'
 < PE2: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec3 EvA2 EvB1.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
PE2 : public_equiv SGF (Scope::EE_A') (Scope1::EE_B')
============================
 public_equiv SG' EE_A' EE_B'
 < apply secure_older_scopes to _ _ _ Sec3.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT EE2 O3 Scope1 O4 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
PE2 : public_equiv (Scope'::SG') (Scope::EE_A') (Scope1::EE_B')
H11 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 public_equiv SG' EE_A' EE_B'
 < case PE2.

Subgoal 8.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT EE2 O3 Scope1 O4 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
PE1 : public_equiv SG' EE1 EE2
H4 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
NSA1 : names_same EE1 SG'
H5 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE2 SG'
H6 : names_same ([]::EE2) ([]::SG')
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_slev L
H10 : is_slev Sl1
H11 : forall X L, lookup [] X L -> lookup Scope' X L
H12 : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope1 X V
H13 : forall X V,
        lookup Scope' X public -> lookup Scope1 X V -> lookup Scope X V
H14 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.8:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.8:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec (keep).

Subgoal 8.1.8.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_add_scope to PE1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
============================
 public_equiv SG' EE_A' EE_B'
 < NSA1: apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSA1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB1: apply level_eval_names_same to _ _ _ _ _ _ EvB Sec1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSB1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG' EE_A' EE_B'
 < PE2: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA2 EvB1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv (Scope1::SG2) (Scope::EE2) (Scope2::EE4)
============================
 public_equiv SG' EE_A' EE_B'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv (Scope'::SG') (Scope::EE2) (Scope2::EE4)
H8 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 public_equiv SG' EE_A' EE_B'
 < case PE2.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
============================
 public_equiv SG' EE_A' EE_B'
 < IsEE2+: apply evalStmt_isCtx to _ _ _ EvA2.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
IsEE2+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE2)
============================
 public_equiv SG' EE_A' EE_B'
 < case IsEE2+.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG' EE_A' EE_B'
 < IsEE4+: apply evalStmt_isCtx to _ _ _ EvB1.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE4)
============================
 public_equiv SG' EE_A' EE_B'
 < case IsEE4+.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 public_equiv SG' EE_A' EE_B'
 < NSA2: apply secure_eval_names_same to _ _ _ _ _ _ EvA2 Sec2.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA2 : names_same (Scope::EE2) (Scope'::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB2: apply secure_eval_names_same to _ _ _ _ _ _ EvB1 Sec2.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA2 : names_same (Scope::EE2) (Scope'::SG')
NSB2 : names_same (Scope2::EE4) (Scope'::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSA': case NSA2.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSB2 : names_same (Scope2::EE4) (Scope'::SG')
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < NSB': case NSB2.

Subgoal 8.1.8.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 SG'
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB'2 : names_same EE4 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < case NSA.

Subgoal 8.1.8.1.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 EE4 O5 O6 O7 Scope' BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 (B::BRest)
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB'2 : names_same EE4 (B::BRest)
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < case NSB'2.

Subgoal 8.1.8.1.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L EE3 O4 Scope2 O5 O6 O7 Scope' BRest B ARest A
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A::ARest)) O5
EvB2 : evalStmt FE (A::ARest) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) EE2 (A::ARest)
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 (B::BRest)
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < case NSA'2.

Subgoal 8.1.8.1.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 O3 O12 Body Cond L EE3 O4 Scope2 O5 O6 O7 Scope' BRest B ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A1::ARest1)) O2 *
EvA3 : evalStmt FE (A1::ARest1) (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A::ARest)) O5
EvB2 : evalStmt FE (A::ARest) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) (A1::ARest1) (A::ARest)
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec EvA3 EvB2.

Subgoal 8.1.8.1.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 O3 O12 Body Cond L EE3 O4 Scope2 O5 O6 O7 Scope' BRest B ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A1::ARest1)) O2 *
EvA3 : evalStmt FE (A1::ARest1) (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A::ARest)) O5
EvB2 : evalStmt FE (A::ARest) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) (A1::ARest1) (A::ARest)
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
H25 : public_equiv (B::BRest) EE_A' EE_B'
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < search.

Subgoal 8.1.8.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 public_equiv SG' EE_A' EE_B'
 < assert L = public -> false.

Subgoal 8.1.8.1.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 L = public -> false
 < intros E.

Subgoal 8.1.8.1.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
E : L = public
============================
 false
 < case E.

Subgoal 8.1.8.1.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond public
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 8.1.8.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : L = public -> false
============================
 public_equiv SG' EE_A' EE_B'
 < PEA: apply while_no_public_change to _ _ _ _ _ _ _ _ Sec Sec1 _ EvA.

Subgoal 8.1.8.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : L = public -> false
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < PEB: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvB Sec1 _.

Subgoal 8.1.8.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : L = public -> false
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < PEA': apply public_equiv_symm to PEA.

Subgoal 8.1.8.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : L = public -> false
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
PEA' : public_equiv SG' EE_A' (ScopeA::EE_A)
============================
 public_equiv SG' EE_A' EE_B'
 < PEAB: apply public_equiv_trans to PEA' PE.

Subgoal 8.1.8.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : L = public -> false
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
PEA' : public_equiv SG' EE_A' (ScopeA::EE_A)
PEAB : public_equiv SG' EE_A' (ScopeB::EE_B)
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_trans to PEAB PEB.

Subgoal 8.1.8.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : L = public -> false
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
PEA' : public_equiv SG' EE_A' (ScopeA::EE_A)
PEAB : public_equiv SG' EE_A' (ScopeB::EE_B)
H4 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.8.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_add_scope to PE1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
============================
 public_equiv SG' EE_A' EE_B'
 < NSA1: apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSA1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB1: apply level_eval_names_same to _ _ _ _ _ _ EvB Sec1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSB1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG' EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 public_equiv SG' EE_A' EE_B'
 < PE2: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA2 EvB1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv (Scope1::SG2) (Scope::EE2) (Scope2::EE4)
============================
 public_equiv SG' EE_A' EE_B'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
PE2 : public_equiv (Scope'::SG') (Scope::EE2) (Scope2::EE4)
H8 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 public_equiv SG' EE_A' EE_B'
 < case PE2.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
============================
 public_equiv SG' EE_A' EE_B'
 < IsEE2+: apply evalStmt_isCtx to _ _ _ EvA2.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
IsEE2+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE2)
============================
 public_equiv SG' EE_A' EE_B'
 < case IsEE2+.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG' EE_A' EE_B'
 < IsEE4+: apply evalStmt_isCtx to _ _ _ EvB1.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE4)
============================
 public_equiv SG' EE_A' EE_B'
 < case IsEE4+.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 public_equiv SG' EE_A' EE_B'
 < NSA2: apply secure_eval_names_same to _ _ _ _ _ _ EvA2 Sec2.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA2 : names_same (Scope::EE2) (Scope'::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSB2: apply secure_eval_names_same to _ _ _ _ _ _ EvB1 Sec2.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA2 : names_same (Scope::EE2) (Scope'::SG')
NSB2 : names_same (Scope2::EE4) (Scope'::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < NSA': case NSA2.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSB2 : names_same (Scope2::EE4) (Scope'::SG')
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < NSB': case NSB2.

Subgoal 8.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope'::SG')
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv SG' EE1 EE3
H3 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 SG'
H4 : names_same ([]::EE1) ([]::SG')
NSB1 : names_same EE3 SG'
H5 : names_same ([]::EE3) ([]::SG')
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv SG' EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 SG'
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB'2 : names_same EE4 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < case NSA.

Subgoal 8.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 Scope' BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) EE2 EE4
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) EE4
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 (B::BRest)
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB'2 : names_same EE4 (B::BRest)
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < case NSB'2.

Subgoal 8.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond EE3 O4 Scope2 O5 O6 O7 Scope' BRest B ARest A
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A::ARest)) O5
EvB2 : evalStmt FE (A::ARest) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) EE2 (A::ARest)
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) EE2
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA'2 : names_same EE2 (B::BRest)
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < case NSA'2.

Subgoal 8.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 O3 O12 Body Cond EE3 O4 Scope2 O5 O6 O7 Scope' BRest B ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A1::ARest1)) O2 *
EvA3 : evalStmt FE (A1::ARest1) (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A::ARest)) O5
EvB2 : evalStmt FE (A::ARest) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) (A1::ARest1) (A::ARest)
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec EvA3 EvB2.

Subgoal 8.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 O3 O12 Body Cond EE3 O4 Scope2 O5 O6 O7 Scope' BRest B ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A1::ARest1)) O2 *
EvA3 : evalStmt FE (A1::ARest1) (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A::ARest)) O5
EvB2 : evalStmt FE (A::ARest) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
PE1 : public_equiv (B::BRest) EE1 EE3
H3 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
NSA1 : names_same EE1 (B::BRest)
H4 : names_same ([]::EE1) ([]::(B::BRest))
NSB1 : names_same EE3 (B::BRest)
H5 : names_same ([]::EE3) ([]::(B::BRest))
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE3
H8 : forall X L, lookup [] X L -> lookup Scope' X L
H9 : forall X V, lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
H10 : forall X V,
        lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
H11 : public_equiv (B::BRest) (A1::ARest1) (A::ARest)
H12 : is_list (is_pair is_string is_value) Scope
H13 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H14 : is_list (is_pair is_string is_value) Scope2
H15 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
NSA' : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSB' : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB'1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
H16 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H17 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H18 : names_same EE_A BRest
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
H25 : public_equiv (B::BRest) EE_A' EE_B'
============================
 public_equiv (B::BRest) EE_A' EE_B'
 < search.

Subgoal 8.1.8.2.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 8.1.9:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.9:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec (keep).

Subgoal 8.1.9.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB (keep).

Subgoal 8.1.9.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < assert L = public -> false.

Subgoal 8.1.9.1.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
============================
 L = public -> false
 < intros E.

Subgoal 8.1.9.1.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
E : L = public
============================
 false
 < case E.

Subgoal 8.1.9.1.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond public
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB1.

Subgoal 8.1.9.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
H3 : L = public -> false
============================
 public_equiv SG' EE_A' EE_B'
 < PEB: apply while_no_public_change to _ _ _ _ _ _ _ _ Sec Sec1 _ EvB.

Subgoal 8.1.9.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
H3 : L = public -> false
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < PEA: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvA1 Sec1 _.

Subgoal 8.1.9.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
H3 : L = public -> false
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
============================
 public_equiv SG' EE_A' EE_B'
 < PEA': apply public_equiv_symm to PEA.

Subgoal 8.1.9.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
H3 : L = public -> false
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
PEA' : public_equiv SG' EE_A' (ScopeA::EE_A)
============================
 public_equiv SG' EE_A' EE_B'
 < PEAB: apply public_equiv_trans to PEA' PE.

Subgoal 8.1.9.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
H3 : L = public -> false
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
PEA' : public_equiv SG' EE_A' (ScopeA::EE_A)
PEAB : public_equiv SG' EE_A' (ScopeB::EE_B)
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_trans to PEAB PEB.

Subgoal 8.1.9.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB2 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB3 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB4 : O1 ++ O2 = O12
EvB5 : O12 ++ O3 = OB
H3 : L = public -> false
PEB : public_equiv SG' (ScopeB::EE_B) EE_B'
PEA : public_equiv SG' (ScopeA::EE_A) EE_A'
PEA' : public_equiv SG' EE_A' (ScopeA::EE_A)
PEAB : public_equiv SG' EE_A' (ScopeB::EE_B)
H4 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.9.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB1.

Subgoal 8.1.9.1.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
EvB1 : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.9.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.9.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB1 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB2 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB3 : O1 ++ O2 = O12
EvB4 : O12 ++ O3 = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 8.1.9.2.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 8.1.9.2.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
H3 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.10:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (scopeStmt S1) SG'
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (scopeStmt S1) EE_B' OB
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.10:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (scopeStmt S1) SG'
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (scopeStmt S1) EE_B' OB
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (scopeStmt S1) EE_B' OB
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply public_equiv_add_scope to PE.

Subgoal 8.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : public_equiv ([]::SG') ([]::(ScopeA::EE_A)) ([]::(ScopeB::EE_B))
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSA.

Subgoal 8.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : public_equiv ([]::SG') ([]::(ScopeA::EE_A)) ([]::(ScopeB::EE_B))
H3 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_same_add_scope to NSB.

Subgoal 8.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : public_equiv ([]::SG') ([]::(ScopeA::EE_A)) ([]::(ScopeB::EE_B))
H3 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
H4 : names_same ([]::(ScopeB::EE_B)) ([]::SG')
============================
 public_equiv SG' EE_A' EE_B'
 < PE': apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : public_equiv ([]::SG') ([]::(ScopeA::EE_A)) ([]::(ScopeB::EE_B))
H3 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
H4 : names_same ([]::(ScopeB::EE_B)) ([]::SG')
PE' : public_equiv (Scope1::SG') (Scope::EE_A') (Scope2::EE_B')
============================
 public_equiv SG' EE_A' EE_B'
 < case PE'.

Subgoal 8.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : public_equiv ([]::SG') ([]::(ScopeA::EE_A)) ([]::(ScopeB::EE_B))
H3 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
H4 : names_same ([]::(ScopeB::EE_B)) ([]::SG')
H5 : forall X V, lookup Scope1 X public -> lookup Scope X V -> lookup Scope2 X V
H6 : forall X V, lookup Scope1 X public -> lookup Scope2 X V -> lookup Scope X V
H7 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.11:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.11:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.11:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.11.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E I1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I1) EE_B' O2
EvB1 : O2 ++ [intVal I1] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.11.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E I1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I1) EE_B' O2
EvB1 : O2 ++ [intVal I1] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.11.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.11.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.11.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.11.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.11.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.11.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.12:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.12:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.12:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.12.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.12.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.12.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.12.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.12.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.12.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.12.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.12.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.13:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.13:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.13:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.13.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.13.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.13.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.13.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.13.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.13.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.13.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.13.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.14:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
============================
 public_equiv SG' EE_A' EE_B'
 < case IsS.

Subgoal 8.1.14:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.14:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 public_equiv SG' EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.1.14.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.14.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.14.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.14.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.14.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.14.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.14.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E S2 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S2) EE_B' O2
EvB1 : O2 ++ [stringVal S2] = OB
============================
 public_equiv SG' EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.14.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E S2 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S2) EE_B' O2
EvB1 : O2 ++ [stringVal S2] = OB
H2 : public_equiv SG' EE_A' EE_B'
============================
 public_equiv SG' EE_A' EE_B'
 < search.

Subgoal 8.1.15:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt (secdecl L Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (secdecl L Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
============================
 public_equiv SG' (((X, V)::Scope)::EE1) EE_B'
 < case IsS.

Subgoal 8.1.15:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (secdecl L Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 public_equiv SG' (((X, V)::Scope)::EE1) EE_B'
 < EvB: case EvB.

Subgoal 8.1.15:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty L EE2 Scope1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (secdecl L Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope1::EE2) OB
============================
 public_equiv SG' (((X, V)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < Sec: case Sec.

Subgoal 8.1.15.1:

Variables: SF PC FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty EE2 Scope1 V1 L1 SG1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope2::SG1)
NSB : names_same (ScopeB::EE_B) (Scope2::SG1)
PE : public_equiv (Scope2::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl private Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope1::EE2) OB
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
============================
 public_equiv (((X, private)::Scope2)::SG1) (((X, V)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.15.1:

Variables: SF PC FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty EE2 Scope1 V1 L1 SG1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope2::SG1)
NSB : names_same (ScopeB::EE_B) (Scope2::SG1)
PE : public_equiv (Scope2::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl private Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope1::EE2) OB
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
PE' : public_equiv (Scope2::SG1) (Scope::EE1) (Scope1::EE2)
============================
 public_equiv (((X, private)::Scope2)::SG1) (((X, V)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < backchain public_equiv_add_other.

Subgoal 8.1.15.2:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty EE2 Scope1 V1 SG1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope2::SG1)
NSB : names_same (ScopeB::EE_B) (Scope2::SG1)
PE : public_equiv (Scope2::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl public Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope1::EE2) OB
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
============================
 public_equiv (((X, public)::Scope2)::SG1) (((X, V)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.15.2:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty EE2 Scope1 V1 SG1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope2::SG1)
NSB : names_same (ScopeB::EE_B) (Scope2::SG1)
PE : public_equiv (Scope2::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl public Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope1::EE2) OB
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
PE' : public_equiv (Scope2::SG1) (Scope::EE1) (Scope1::EE2)
============================
 public_equiv (((X, public)::Scope2)::SG1) (((X, V)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 8.1.15.2:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope X E Ty EE2 Scope1 V1 SG1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope2::SG1)
NSB : names_same (ScopeB::EE_B) (Scope2::SG1)
PE : public_equiv (Scope2::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl public Ty X E) (((X, V1)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V1 (Scope::EE1) OA *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope1::EE2) OB
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
PE' : public_equiv (Scope2::SG1) (Scope::EE1) (Scope1::EE2)
============================
 public_equiv (((X, public)::Scope2)::SG1) (((X, V1)::Scope)::EE1) (((X, V1)::Scope1)::EE2)
 < backchain public_equiv_add_public.

Subgoal 8.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC <unknown K evalStmt> SG'
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
============================
 public_equiv SG' EE_A' EE_B'
 < Sec: case Sec.

Subgoal 8.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_is to _ EvA1.

Subgoal 8.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
============================
 public_equiv SG' EE_A' EE_B'
 < apply names_is_sec to _ Sec.

Subgoal 8.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG' EE_A' EE_B'
 < apply proj_stmt_unique to Sec1 EvA2 _ _ _ _ _.

Subgoal 8.1.16.1:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 8.1.16.1:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NSA EvA1 Sec M.

Subgoal 8.1.16.1:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 8.1.16.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 8.1.16.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NSA EvA1 Sec M.

Subgoal 8.1.16.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 8.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG' EE_A' EE_B'
 < apply proj_stmt_is to Sec1 _ _.

Subgoal 8.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
============================
 public_equiv SG' EE_A' EE_B'
 < case NSA (keep).

Subgoal 8.1.16:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
============================
 public_equiv SG' EE_A' EE_B'
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < NSB-: apply names_same_symmetric to NSB.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < NSAB: apply names_same_transitive to NSA NSB-.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < NamesB: apply names_exists to IsEE_B.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < apply names_is to _ EvA1.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < apply names_is to _ NamesB.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < PrB: apply proj_stmt_other to EvA2 _ _ _ with
          L' = N.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < apply proj_stmt_unique to EvA2 PrB _ _ _ _ _.

Subgoal 8.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 forall X, mem X N -> mem X Names
 < intros M.

Subgoal 8.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X N
============================
 mem X Names
 < NSBA: apply names_same_symmetric to NSAB.

Subgoal 8.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X N
NSBA : names_same (ScopeB::EE_B) (ScopeA::EE_A)
============================
 mem X Names
 < apply names_same_names to NSBA NamesB EvA1 M.

Subgoal 8.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X N
NSBA : names_same (ScopeB::EE_B) (ScopeA::EE_A)
H10 : mem X Names
============================
 mem X Names
 < search.

Subgoal 8.1.16.4:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 forall X, mem X Names -> mem X N
 < intros M.

Subgoal 8.1.16.4:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X Names
============================
 mem X N
 < apply names_same_names to NSAB EvA1 NamesB M.

Subgoal 8.1.16.4:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X Names
H10 : mem X N
============================
 mem X N
 < search.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < EvB': apply proj_evalStmt_forward to PrB NamesB _ _ _ EvB.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < EvA': apply proj_evalStmt_forward to EvA2 EvA1 _ _ _ EvA.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE'' EE''1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE''1 OA
EvA'1 : scopes_same EE_A' EE''1
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < apply evalStmt_unique to _ _ _ EvA' EvA3.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' O_P @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < apply proj_stmt_is to PrB _ _.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' O_P @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H10 : is_stmt S''
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < PE_Pr: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA3 EvB'.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' O_P @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H10 : is_stmt S''
PE_Pr : public_equiv (Scope'::BRest) EE_P EE''
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < PE': apply public_equiv_scopes_same_snd to PE_Pr EvB'1.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' O_P @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H10 : is_stmt S''
PE_Pr : public_equiv (Scope'::BRest) EE_P EE''
PE' : public_equiv (Scope'::BRest) EE_P EE_B'
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < apply public_equiv_scopes_same_fst to PE' EvA'1.

Subgoal 8.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' O_P @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H10 : is_stmt S''
PE_Pr : public_equiv (Scope'::BRest) EE_P EE''
PE' : public_equiv (Scope'::BRest) EE_P EE_B'
H11 : public_equiv (Scope'::BRest) EE_A' EE_B'
============================
 public_equiv (Scope'::BRest) EE_A' EE_B'
 < search.

Subgoal 8.2.1:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB I
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (num I) L
EvA : evalExpr FE EE_A' (num I) (intVal I) EE_A' [] @
EvB : evalExpr FE EE_B (num I) VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case EvB.

Subgoal 8.2.1:

Variables: SF SG PC L FE EE_A' EE_B' I
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (num I) L
EvA : evalExpr FE EE_A' (num I) (intVal I) EE_A' [] @
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (plus E1 E2) L
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (plus E1 E2) L
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (minus E1 E2) L
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (minus E1 E2) L
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (mult E1 E2) L
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (mult E1 E2) L
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (div E1 E2) L
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (div E1 E2) L
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.6:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC true L
EvA : evalExpr FE EE_A' true trueVal EE_A' [] @
EvB : evalExpr FE EE_B true VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case EvB.

Subgoal 8.2.6:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC true L
EvA : evalExpr FE EE_A' true trueVal EE_A' [] @
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.7:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC false L
EvA : evalExpr FE EE_A' false falseVal EE_A' [] @
EvB : evalExpr FE EE_B false VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case EvB.

Subgoal 8.2.7:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC false L
EvA : evalExpr FE EE_A' false falseVal EE_A' [] @
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.8:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.8:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.8:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.8.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.8.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.8.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEA: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 8.2.8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.8.2.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : public = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
============================
 public_equiv SG EE_A' EE_B'
 < PEA': apply public_equiv_symm to PEA.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PEA' PE1.

Subgoal 8.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.9:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.9:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.9:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.9.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.9.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.9.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEB: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 8.2.9.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.9.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.9.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.9.1.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PE1 PEB.

Subgoal 8.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.9.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.9.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
H3 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.9.3.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.9.3.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.9.3.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEB: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 8.2.9.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.9.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.9.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.9.3.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PE1 PEB.

Subgoal 8.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.10:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.10:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.10:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.10.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.10.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.10.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEA: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 8.2.10.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.10.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.10.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.10.2.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : public = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
============================
 public_equiv SG EE_A' EE_B'
 < PEA': apply public_equiv_symm to PEA.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PEA' PE1.

Subgoal 8.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.11:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.11:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.11:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.11.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.11.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
H3 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.11.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.11.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.11.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEB: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 8.2.11.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.11.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.11.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.11.2.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PE1 PEB.

Subgoal 8.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.11.3.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.11.3.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.11.3.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEB: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 8.2.11.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.11.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.11.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.11.3.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PE1 PEB.

Subgoal 8.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE_A' EE1
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEB : public_equiv SG EE1 EE_B'
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.12:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.12:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.12:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.12.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.12.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.12.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEA: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 8.2.12.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.12.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.12.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.12.1.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : public = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
============================
 public_equiv SG EE_A' EE_B'
 < PEA': apply public_equiv_symm to PEA.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PEA' PE1.

Subgoal 8.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.13:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.13:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.13:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < NEq: assert L2 = public -> false.

Subgoal 8.2.13.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 8.2.13.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 8.2.13.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 false
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
============================
 public_equiv SG EE_A' EE_B'
 < PE1: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < PEA: apply expr_not_public_no_public_change to _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 8.2.13.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 8.2.13.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 8.2.13.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 8.2.13.1.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : public = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
============================
 public_equiv SG EE_A' EE_B'
 < PEA': apply public_equiv_symm to PEA.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_trans to PEA' PE1.

Subgoal 8.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
PE1 : public_equiv SG EE1 EE_B'
H3 : names_same EE1 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_slev L2
H6 : is_slev Sl1
PEA : public_equiv SG EE1 EE_A'
PEA' : public_equiv SG EE_A' EE1
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_is to _ _ _ Lev.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
============================
 public_equiv SG EE_A' EE_B'
 < apply join_is to _ _ Lev1.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L2
H9 : is_slev Sl1
H10 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.14:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.14:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.14:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.14.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.14.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
H2 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.14.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.14.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
H2 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.15:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.15:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.15:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.15.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.15.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
H2 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.15.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.15.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
H2 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.16:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.16:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.16:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.17:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.17:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.17:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.18:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.18:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.18:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.19:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.19:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.19:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.20:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (stringLit S) L
EvA : evalExpr FE EE_A' (stringLit S) (stringVal S) EE_A' [] @
EvB : evalExpr FE EE_B (stringLit S) VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case EvB.

Subgoal 8.2.20:

Variables: SF SG PC L FE EE_A' EE_B' S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (stringLit S) L
EvA : evalExpr FE EE_A' (stringLit S) (stringVal S) EE_A' [] @
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (appString E1 E2) L
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (appString E1 E2) L
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.22:

Variables: SF SG PC L FE EE_A' VA EE_B EE_B' VB OB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (name X) L
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvB : evalExpr FE EE_B (name X) VB EE_B' OB
EvA1 : lookupScopes X EE_A' VA
============================
 public_equiv SG EE_A' EE_B'
 < case EvB.

Subgoal 8.2.22:

Variables: SF SG PC L FE EE_A' VA EE_B' VB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (name X) L
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvA1 : lookupScopes X EE_A' VA
H1 : lookupScopes X EE_B' VB
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.23:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) L
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvB : evalExpr FE EE_B (call Fun Args) VB EE_B' OB
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.23:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) L
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvB : evalExpr FE EE_B (call Fun Args) VB EE_B' OB
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.23:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) L
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_A to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_A to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (stmtExpr S E1) L
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (stmtExpr S E1) L
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (stmtExpr S E1) L
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
============================
 public_equiv SG EE_A' EE_B'
 < apply names_same_add_scope to NSA.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
============================
 public_equiv SG EE_A' EE_B'
 < apply names_same_add_scope to NSB.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_add_scope to PE.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalStmt_isCtx to _ _ _ EvA1.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalStmt_isCtx to _ _ _ EvB.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply secure_is to _ _ _ Lev.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 public_equiv SG EE_A' EE_B'
 < apply secure_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_list (is_list (is_pair is_string is_slev)) SG2
H10 : names_same EE1 SG2
============================
 public_equiv SG EE_A' EE_B'
 < apply secure_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_list (is_list (is_pair is_string is_slev)) SG2
H10 : names_same EE1 SG2
H11 : names_same EE2 SG2
============================
 public_equiv SG EE_A' EE_B'
 < PE': apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_list (is_list (is_pair is_string is_slev)) SG2
H10 : names_same EE1 SG2
H11 : names_same EE2 SG2
PE' : public_equiv SG2 (Scope::EE_A') (Scope1::EE_B')
============================
 public_equiv SG EE_A' EE_B'
 < apply secure_older_scopes to _ _ _ Lev.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv (Scope'::SG) EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
H10 : names_same EE1 (Scope'::SG)
H11 : names_same EE2 (Scope'::SG)
PE' : public_equiv (Scope'::SG) (Scope::EE_A') (Scope1::EE_B')
H12 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 public_equiv SG EE_A' EE_B'
 < case PE'.

Subgoal 8.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S EE2 O3 Scope1 O4 Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
Lev : secure SF ([]::SG) PC S (Scope'::SG)
Lev1 : level SF (Scope'::SG) PC E1 L
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv (Scope'::SG) EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : is_list (is_list (is_pair is_string is_slev)) (Scope'::SG)
H10 : names_same EE1 (Scope'::SG)
H11 : names_same EE2 (Scope'::SG)
H12 : forall X L, lookup [] X L -> lookup Scope' X L
H13 : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope1 X V
H14 : forall X V,
        lookup Scope' X public -> lookup Scope1 X V -> lookup Scope X V
H15 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (recBuild RF)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recBuild RF) L
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recBuild RF) L
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB VF RF VF1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recBuild RF) L
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
EvB : evalRecFields FE EE_B RF VF1 EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB VF RF VF1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
EvB : evalRecFields FE EE_B RF VF1 EE_B' OB
Lev : levelRecFields SF SG PC RF L
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_RF to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB VF RF VF1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
EvB : evalRecFields FE EE_B RF VF1 EE_B' OB
Lev : levelRecFields SF SG PC RF L
H2 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (recFieldAccess Rec F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recFieldAccess Rec F) L
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
============================
 public_equiv SG EE_A' EE_B'
 < case IsE.

Subgoal 8.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recFieldAccess Rec F) L
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recFieldAccess Rec F) L
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
Lev : level SF SG PC Rec L
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
Lev : level SF SG PC Rec L
H3 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC <unknown K evalExpr> L
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
============================
 public_equiv SG EE_A' EE_B'
 < apply names_is to _ EvA1.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
============================
 public_equiv SG EE_A' EE_B'
 < apply names_is_sec to _ Lev.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG EE_A' EE_B'
 < apply proj_expr_unique to Lev1 EvA2 _ _ _ _ _.

Subgoal 8.2.27.1:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 8.2.27.1:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NSA EvA1 Lev M.

Subgoal 8.2.27.1:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 8.2.27.2:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 8.2.27.2:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NSA EvA1 Lev M.

Subgoal 8.2.27.2:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 public_equiv SG EE_A' EE_B'
 < apply proj_expr_is to Lev1 _ _.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
============================
 public_equiv SG EE_A' EE_B'
 < NSB-: apply names_same_symmetric to NSB.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
============================
 public_equiv SG EE_A' EE_B'
 < NSAB: apply names_same_transitive to NSA NSB-.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
============================
 public_equiv SG EE_A' EE_B'
 < NamesB: apply names_exists to IsEE_B.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
============================
 public_equiv SG EE_A' EE_B'
 < apply names_is to _ EvA1.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
============================
 public_equiv SG EE_A' EE_B'
 < apply names_is to _ NamesB.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
============================
 public_equiv SG EE_A' EE_B'
 < PrB: apply proj_expr_other to EvA2 _ _ _ with
          L' = N.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 public_equiv SG EE_A' EE_B'
 < apply proj_expr_unique to EvA2 PrB _ _ _ _ _.

Subgoal 8.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 forall X, mem X N -> mem X Names
 < intros M.

Subgoal 8.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
============================
 mem X Names
 < NSBA: apply names_same_symmetric to NSAB.

Subgoal 8.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
NSBA : names_same EE_B EE_A
============================
 mem X Names
 < apply names_same_names to NSBA NamesB EvA1 M.

Subgoal 8.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
NSBA : names_same EE_B EE_A
H6 : mem X Names
============================
 mem X Names
 < search.

Subgoal 8.2.27.4:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 forall X, mem X Names -> mem X N
 < intros M.

Subgoal 8.2.27.4:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X Names
============================
 mem X N
 < apply names_same_names to NSAB EvA1 NamesB M.

Subgoal 8.2.27.4:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X Names
H6 : mem X N
============================
 mem X N
 < search.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 public_equiv SG EE_A' EE_B'
 < EvB': apply proj_evalExpr_forward to PrB NamesB _ _ _ EvB.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
============================
 public_equiv SG EE_A' EE_B'
 < EvA': apply proj_evalExpr_forward to EvA2 EvA1 _ _ _ EvA.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE'' EE''1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' VA EE''1 OA
EvA'1 : scopes_same EE_A' EE''1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_unique to _ _ _ EvA' EvA3.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
============================
 public_equiv SG EE_A' EE_B'
 < apply proj_expr_is to PrB _ _.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
============================
 public_equiv SG EE_A' EE_B'
 < PE_Pr: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA3 EvB'.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
PE_Pr : public_equiv SG EE_P EE''
============================
 public_equiv SG EE_A' EE_B'
 < PE': apply public_equiv_scopes_same_snd to PE_Pr EvB'1.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
PE_Pr : public_equiv SG EE_P EE''
PE' : public_equiv SG EE_P EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < apply public_equiv_scopes_same_fst to PE' EvA'1.

Subgoal 8.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
PE_Pr : public_equiv SG EE_P EE''
PE' : public_equiv SG EE_P EE_B'
H7 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.3.1:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : levelArgs SF SG PC nilArgs L
EvA : evalArgs FE EE_A' nilArgs [] EE_A' [] @
EvB : evalArgs FE EE_B nilArgs VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case EvB.

Subgoal 8.3.1:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : levelArgs SF SG PC nilArgs L
EvA : evalArgs FE EE_A' nilArgs [] EE_A' [] @
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args (consArgs E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC (consArgs E Rest) L
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsA.

Subgoal 8.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC (consArgs E Rest) L
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_A to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.3.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args <unknown K evalArgs>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC <unknown K evalArgs> L
EvA : evalArgs FE EE_A <unknown K evalArgs> VA EE_A' OA @
EvB : evalArgs FE EE_B <unknown K evalArgs> VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case Lev.

Subgoal 8.4.1:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : levelRecFields SF SG PC nilRecFieldExprs L
EvA : evalRecFields FE EE_A' nilRecFieldExprs [] EE_A' [] @
EvB : evalRecFields FE EE_B nilRecFieldExprs VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case EvB.

Subgoal 8.4.1:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : levelRecFields SF SG PC nilRecFieldExprs L
EvA : evalRecFields FE EE_A' nilRecFieldExprs [] EE_A' [] @
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 public_equiv SG EE_A' EE_B'
 < case IsRF.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 public_equiv SG EE_A' EE_B'
 < Lev: case Lev.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
============================
 public_equiv SG EE_A' EE_B'
 < EvB: case EvB.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG EE1 EE2
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 public_equiv SG EE_A' EE_B'
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
============================
 public_equiv SG EE_A' EE_B'
 < apply IH_RF to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
H9 : public_equiv SG EE_A' EE_B'
============================
 public_equiv SG EE_A' EE_B'
 < search.

Subgoal 8.4.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC <unknown K evalRecFields> L
EvA : evalRecFields FE EE_A <unknown K evalRecFields> VA EE_A' OA @
EvB : evalRecFields FE EE_B <unknown K evalRecFields> VB EE_B' OB
============================
 public_equiv SG EE_A' EE_B'
 < case Lev.

Subgoal 8.5.1:

Variables: SF SG PC FE EE_A' EE_B EE_B' VB OB I
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (num I) public
EvA : evalExpr FE EE_A' (num I) (intVal I) EE_A' [] @
EvB : evalExpr FE EE_B (num I) VB EE_B' OB
============================
 intVal I = VB
 < case EvB.

Subgoal 8.5.1:

Variables: SF SG PC FE EE_A' EE_B' I
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (num I) public
EvA : evalExpr FE EE_A' (num I) (intVal I) EE_A' [] @
============================
 intVal I = intVal I
 < search.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (plus E1 E2) public
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
============================
 intVal I = VB
 < case IsE.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (plus E1 E2) public
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = VB
 < Lev: case Lev.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 intVal I = VB
 < EvB: case EvB.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 intVal I = intVal I3
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 intVal I = intVal I3
 < apply join_public to _ _ Lev2.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I4 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 + I5 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply plus_integer_unique to EvA3 EvB2.

Subgoal 8.5.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I3) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 + I5 = I3
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I3 = intVal I3
 < search.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (minus E1 E2) public
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
============================
 intVal I = VB
 < case IsE.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (minus E1 E2) public
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = VB
 < Lev: case Lev.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 intVal I = VB
 < EvB: case EvB.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 intVal I = intVal I3
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 intVal I = intVal I3
 < apply join_public to _ _ Lev2.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I4 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 - I5 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply minus_integer_unique to EvA3 EvB2.

Subgoal 8.5.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I3) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 - I5 = I3
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I3 = intVal I3
 < search.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (mult E1 E2) public
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
============================
 intVal I = VB
 < case IsE.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (mult E1 E2) public
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = VB
 < Lev: case Lev.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 intVal I = VB
 < EvB: case EvB.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 intVal I = intVal I3
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 intVal I = intVal I3
 < apply join_public to _ _ Lev2.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I4 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 * I5 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply multiply_integer_unique to EvA3 EvB2.

Subgoal 8.5.4:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I3) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 * I5 = I3
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I3 = intVal I3
 < search.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (div E1 E2) public
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
============================
 intVal I = VB
 < case IsE.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (div E1 E2) public
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = VB
 < Lev: case Lev.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 intVal I = VB
 < EvB: case EvB.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 intVal I = intVal I3
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 intVal I = intVal I3
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 intVal I = intVal I3
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L1 L2 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 intVal I = intVal I3
 < apply join_public to _ _ Lev2.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 I2 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I4 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 I E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 / I5 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I = intVal I3
 < apply divide_integer_unique to EvA3 EvB2.

Subgoal 8.5.5:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I3) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I5) EE_A' O2 *
EvA3 : I4 / I5 = I3
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 intVal I3 = intVal I3
 < search.

Subgoal 8.5.6:

Variables: SF SG PC FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC true public
EvA : evalExpr FE EE_A' true trueVal EE_A' [] @
EvB : evalExpr FE EE_B true VB EE_B' OB
============================
 trueVal = VB
 < case EvB.

Subgoal 8.5.6:

Variables: SF SG PC FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC true public
EvA : evalExpr FE EE_A' true trueVal EE_A' [] @
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.7:

Variables: SF SG PC FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC false public
EvA : evalExpr FE EE_A' false falseVal EE_A' [] @
EvB : evalExpr FE EE_B false VB EE_B' OB
============================
 falseVal = VB
 < case EvB.

Subgoal 8.5.7:

Variables: SF SG PC FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC false public
EvA : evalExpr FE EE_A' false falseVal EE_A' [] @
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.8:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) public
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 trueVal = VB
 < case IsE.

Subgoal 8.5.8:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) public
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = VB
 < Lev: case Lev.

Subgoal 8.5.8:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
============================
 trueVal = VB
 < EvB: case EvB.

Subgoal 8.5.8.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.8.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.8.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
H3 : is_slev L1
============================
 trueVal = falseVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.8.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.8.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 trueVal = falseVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.8.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
============================
 trueVal = falseVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 trueVal = falseVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.8.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
H10 : names_same EE2 SG
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.5.9:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) public
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
============================
 falseVal = VB
 < case IsE.

Subgoal 8.5.9:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) public
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = VB
 < Lev: case Lev.

Subgoal 8.5.9:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
============================
 falseVal = VB
 < EvB: case EvB.

Subgoal 8.5.9.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.9.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev L1
============================
 falseVal = trueVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.9.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.9.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 falseVal = trueVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.9.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 Sl1 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.9.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.9.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.10:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) public
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 falseVal = VB
 < case IsE.

Subgoal 8.5.10:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) public
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = VB
 < Lev: case Lev.

Subgoal 8.5.10:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
============================
 falseVal = VB
 < EvB: case EvB.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
============================
 falseVal = trueVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 falseVal = trueVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.10.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
H10 : names_same EE2 SG
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.5.10.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.10.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.11:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) public
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
============================
 trueVal = VB
 < case IsE.

Subgoal 8.5.11:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) public
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = VB
 < Lev: case Lev.

Subgoal 8.5.11:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
============================
 trueVal = VB
 < EvB: case EvB.

Subgoal 8.5.11.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.11.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.11.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.11.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev L1
============================
 trueVal = falseVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.11.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.11.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L1 Sl1 L2 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 trueVal = falseVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.11.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 Sl1 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.12:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) public
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 trueVal = VB
 < case IsE.

Subgoal 8.5.12:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) public
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = VB
 < Lev: case Lev.

Subgoal 8.5.12:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
============================
 trueVal = VB
 < EvB: case EvB.

Subgoal 8.5.12.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.12.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
============================
 trueVal = falseVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 trueVal = falseVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.12.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
H10 : names_same EE2 SG
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.5.13:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) public
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 falseVal = VB
 < case IsE.

Subgoal 8.5.13:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) public
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = VB
 < Lev: case Lev.

Subgoal 8.5.13:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
============================
 falseVal = VB
 < EvB: case EvB.

Subgoal 8.5.13.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.13.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
H3 : is_slev L1
============================
 falseVal = trueVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.13.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.13.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 falseVal = trueVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.13.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
============================
 falseVal = trueVal
 < apply join_is to _ _ Lev1.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev2.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev L1
H4 : is_slev Sl1
H5 : is_slev L2
============================
 falseVal = trueVal
 < apply join_public to _ _ Lev3.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.13.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 Sl1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 public
Lev3 : join public public public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_slev public
H4 : is_slev Sl1
H5 : is_slev public
H6 : public_equiv SG EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG
H10 : names_same EE2 SG
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 8.5.13.3:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L1 Sl1 L2 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : join L1 PC Sl1
Lev2 : level SF SG Sl1 E2 L2
Lev3 : join L1 L2 public
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.14:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) public
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
============================
 trueVal = VB
 < case IsE.

Subgoal 8.5.14:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) public
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
============================
 trueVal = VB
 < Lev: case Lev.

Subgoal 8.5.14:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 public
============================
 trueVal = VB
 < EvB: case EvB.

Subgoal 8.5.14.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.14.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.15:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) public
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
============================
 falseVal = VB
 < case IsE.

Subgoal 8.5.15:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) public
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
============================
 falseVal = VB
 < Lev: case Lev.

Subgoal 8.5.15:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 public
============================
 falseVal = VB
 < EvB: case EvB.

Subgoal 8.5.15.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 public
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.15.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 public
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.16:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) public
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
============================
 trueVal = VB
 < case IsE.

Subgoal 8.5.16:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) public
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = VB
 < Lev: case Lev.

Subgoal 8.5.16:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 trueVal = VB
 < EvB: case EvB.

Subgoal 8.5.16.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 trueVal = falseVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 trueVal = falseVal
 < apply join_public to _ _ Lev2.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 I2 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I3) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I3 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I3) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I4) EE_A' O2 *
EvA3 : I3 > I4
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 trueVal = falseVal
 < L: case EvA3.

Subgoal 8.5.16.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I3) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I4) EE_A' O2 *
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
L : I4 < I3
============================
 trueVal = falseVal
 < apply less_lesseq_flip_false to L EvB2.

Subgoal 8.5.17:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) public
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
============================
 falseVal = VB
 < case IsE.

Subgoal 8.5.17:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) public
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = VB
 < Lev: case Lev.

Subgoal 8.5.17:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 falseVal = VB
 < EvB: case EvB.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 falseVal = trueVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 falseVal = trueVal
 < apply join_public to _ _ Lev2.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 I2 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I3) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I3 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I3) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I4) EE_A' O2 *
EvA3 : I3 <= I4
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 falseVal = trueVal
 < L: case EvB2.

Subgoal 8.5.17.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I3) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I4) EE_A' O2 *
EvA3 : I3 <= I4
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
L : I4 < I3
============================
 falseVal = trueVal
 < apply less_lesseq_flip_false to L EvA3.

Subgoal 8.5.17.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L1 L2 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.18:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) public
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 trueVal = VB
 < case IsE.

Subgoal 8.5.18:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) public
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = VB
 < Lev: case Lev.

Subgoal 8.5.18:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 trueVal = VB
 < EvB: case EvB.

Subgoal 8.5.18.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 trueVal = trueVal
 < search.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
============================
 trueVal = falseVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 trueVal = falseVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 trueVal = falseVal
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L1 L2 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 trueVal = falseVal
 < apply join_public to _ _ Lev2.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V1 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 trueVal = falseVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.18.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V2 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 V2 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V2 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 trueVal = falseVal
 < apply EvB2 to _.

Subgoal 8.5.19:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) public
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
============================
 falseVal = VB
 < case IsE.

Subgoal 8.5.19:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) public
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = VB
 < Lev: case Lev.

Subgoal 8.5.19:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 falseVal = VB
 < EvB: case EvB.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 falseVal = trueVal
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 falseVal = trueVal
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 falseVal = trueVal
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 falseVal = trueVal
 < apply join_public to _ _ Lev2.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 V2 O2 E2 E1 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 falseVal = trueVal
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.19.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : V = V -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 falseVal = trueVal
 < apply EvA3 to _.

Subgoal 8.5.19.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L1 L2 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
============================
 falseVal = falseVal
 < search.

Subgoal 8.5.20:

Variables: SF SG PC FE EE_A' EE_B EE_B' VB OB S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (stringLit S) public
EvA : evalExpr FE EE_A' (stringLit S) (stringVal S) EE_A' [] @
EvB : evalExpr FE EE_B (stringLit S) VB EE_B' OB
============================
 stringVal S = VB
 < case EvB.

Subgoal 8.5.20:

Variables: SF SG PC FE EE_A' EE_B' S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (stringLit S) public
EvA : evalExpr FE EE_A' (stringLit S) (stringVal S) EE_A' [] @
============================
 stringVal S = stringVal S
 < search.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (appString E1 E2) public
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
============================
 stringVal S = VB
 < case IsE.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (appString E1 E2) public
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 stringVal S = VB
 < Lev: case Lev.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
============================
 stringVal S = VB
 < EvB: case EvB.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
============================
 stringVal S = stringVal S3
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 stringVal S = stringVal S3
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 stringVal S = stringVal S3
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 stringVal S = stringVal S3
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 stringVal S = stringVal S3
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 stringVal S = stringVal S3
 < apply level_is to _ _ _ Lev.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
============================
 stringVal S = stringVal S3
 < apply level_is to _ _ _ Lev1.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L1 L2 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L1
Lev1 : level SF SG PC E2 L2
Lev2 : join L1 L2 public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L1
H9 : is_slev L2
============================
 stringVal S = stringVal S3
 < apply join_public to _ _ Lev2.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 stringVal S = stringVal S3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 S2 O2 S E2 E1 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S4 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 stringVal S = stringVal S3
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 S E2 E1 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S5) EE_A' O2 *
EvA3 : S4 ++ S5 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 stringVal S = stringVal S3
 < apply append_unique to EvA3 EvB2.

Subgoal 8.5.21:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S3) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S4) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S5) EE_A' O2 *
EvA3 : S4 ++ S5 = S3
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : level SF SG PC E2 public
Lev2 : join public public public
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_slev public
============================
 stringVal S3 = stringVal S3
 < search.

Subgoal 8.5.22:

Variables: SF SG PC FE EE_A' VA EE_B EE_B' VB OB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (name X) public
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvB : evalExpr FE EE_B (name X) VB EE_B' OB
EvA1 : lookupScopes X EE_A' VA
============================
 VA = VB
 < Lev: case Lev.

Subgoal 8.5.22:

Variables: SF SG PC FE EE_A' VA EE_B EE_B' VB OB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvB : evalExpr FE EE_B (name X) VB EE_B' OB
EvA1 : lookupScopes X EE_A' VA
Lev : lookupScopes X SG public
============================
 VA = VB
 < EvB: case EvB.

Subgoal 8.5.22:

Variables: SF SG PC FE EE_A' VA EE_B' VB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvA1 : lookupScopes X EE_A' VA
Lev : lookupScopes X SG public
EvB : lookupScopes X EE_B' VB
============================
 VA = VB
 < LB: apply public_equiv_lookupScopes to PE _ _ _ Lev EvA1.

Subgoal 8.5.22:

Variables: SF SG PC FE EE_A' VA EE_B' VB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvA1 : lookupScopes X EE_A' VA
Lev : lookupScopes X SG public
EvB : lookupScopes X EE_B' VB
LB : lookupScopes X EE_B' VA
============================
 VA = VB
 < apply lookupScopes_unique to EvB LB.

Subgoal 8.5.22:

Variables: SF SG PC FE EE_A' VA EE_B' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvA1 : lookupScopes X EE_A' VA
Lev : lookupScopes X SG public
EvB : lookupScopes X EE_B' VA
LB : lookupScopes X EE_B' VA
============================
 VA = VA
 < search.

Subgoal 8.5.23:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) public
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvB : evalExpr FE EE_B (call Fun Args) VB EE_B' OB
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
============================
 VA = VB
 < case IsE.

Subgoal 8.5.23:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) public
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvB : evalExpr FE EE_B (call Fun Args) VB EE_B' OB
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
============================
 VA = VB
 < EvB: case EvB.

Subgoal 8.5.23:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) public
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
============================
 VA = VB
 < Lev: case Lev.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
============================
 VA = VB
 < LAV: apply IH_A_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
============================
 VA = VB
 < apply lookup_unique to EvB EvA1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
============================
 VA = VB
 < FR: case SFC (keep).

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 VA = VB
 < FS: apply FR to Lev EvA1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
============================
 VA = VB
 < PE': apply zip_level_arg_vals to LAV EvA3 EvB2 FS.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
============================
 VA = VB
 < apply public_equiv_add_public to PE' with
     X = RetVar V = RVVal.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
============================
 VA = VB
 < IsFP: apply lookup_is_value_funCtx to _ EvA1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsFP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body)))
============================
 VA = VB
 < IsF: case IsFP.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body))
============================
 VA = VB
 < IsF: case IsF1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 VA = VB
 < IsF: case IsF2.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
============================
 VA = VB
 < apply evalArgs_isValue to _ _ _ EvA2.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
============================
 VA = VB
 < apply evalArgs_isValue to _ _ _ EvB1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
============================
 VA = VB
 < apply zip_is to _ _ EvA3.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
============================
 VA = VB
 < apply zip_is to _ _ EvB2.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
============================
 VA = VB
 < apply zip_names_same to _ _ with
     ZA = (RetVar, RVVal)::InitEnv1 ZB = (RetVar, public)::ZP.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
============================
 VA = VB
 < apply zip_names_same to _ _ with
     ZA = (RetVar, RVVal)::InitEnv ZB = (RetVar, public)::ZP.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
============================
 VA = VB
 < apply levelArgs_is to _ _ _ Lev1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
============================
 VA = VB
 < apply zip_is_sec to _ _ _ with
     Z = (RetVar, public)::ZP.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
============================
 VA = VB
 < PEF: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ FS1 EvA4 EvB3.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv SG1 EE2 EE1
============================
 VA = VB
 < SOS: apply secure_older_scopes to _ _ _ FS1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
============================
 VA = VB
 < LS: apply SOS to _ with
         X = RetVar.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
LS : lookup Scope' RetVar public
============================
 VA = VB
 < apply evalStmt_isCtx to _ _ _ EvA4.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
LS : lookup Scope' RetVar public
H12 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VA = VB
 < apply evalStmt_isCtx to _ _ _ EvB3.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
LS : lookup Scope' RetVar public
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 VA = VB
 < apply secure_eval_names_same to _ _ _ _ _ _ EvA4 FS1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
LS : lookup Scope' RetVar public
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_list (is_list (is_pair is_string is_value)) EE1
H14 : names_same EE2 [Scope']
============================
 VA = VB
 < apply secure_eval_names_same to _ _ _ _ _ _ EvB3 FS1.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
LS : lookup Scope' RetVar public
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_list (is_list (is_pair is_string is_value)) EE1
H14 : names_same EE2 [Scope']
H15 : names_same EE1 [Scope']
============================
 VA = VB
 < LB: apply public_equiv_lookupScopes to PEF _ _ _ _ EvA6.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
LS : lookup Scope' RetVar public
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_list (is_list (is_pair is_string is_value)) EE1
H14 : names_same EE2 [Scope']
H15 : names_same EE1 [Scope']
LB : lookupScopes RetVar EE1 VA
============================
 VA = VB
 < apply lookupScopes_unique to EvB5 LB.

Subgoal 8.5.23:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VA
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body [Scope']
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H3 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list is_value ArgVals
H5 : is_list is_value ArgVals1
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, public)::ZP]
H9 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, public)::ZP]
H10 : is_list is_slev ArgLevs
H11 : is_list (is_pair is_string is_slev) ((RetVar, public)::ZP)
PEF : public_equiv [Scope'] EE2 EE1
SOS : forall X L, lookup ((RetVar, public)::ZP) X L -> lookup Scope' X L
LS : lookup Scope' RetVar public
H12 : is_list (is_list (is_pair is_string is_value)) EE2
H13 : is_list (is_list (is_pair is_string is_value)) EE1
H14 : names_same EE2 [Scope']
H15 : names_same EE1 [Scope']
LB : lookupScopes RetVar EE1 VA
============================
 VA = VA
 < search.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (stmtExpr S E1) public
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
============================
 VA = VB
 < case IsE.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (stmtExpr S E1) public
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
============================
 VA = VB
 < Lev: case Lev.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
============================
 VA = VB
 < EvB: case EvB.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 VA = VB
 < apply names_same_add_scope to NSA.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
============================
 VA = VB
 < apply names_same_add_scope to NSB.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
============================
 VA = VB
 < apply public_equiv_add_scope to PE.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
============================
 VA = VB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
============================
 VA = VB
 < apply evalStmt_isCtx to _ _ _ EvA1.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 VA = VB
 < apply evalStmt_isCtx to _ _ _ EvB.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 VA = VB
 < apply secure_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG2
============================
 VA = VB
 < apply secure_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG2
H10 : names_same EE2 SG2
============================
 VA = VB
 < apply secure_is to _ _ _ Lev.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG2
H10 : names_same EE2 SG2
H11 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 VA = VB
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.5.24:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VB EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VB (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 public
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : public_equiv SG2 EE1 EE2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : is_list (is_list (is_pair is_string is_value)) EE2
H9 : names_same EE1 SG2
H10 : names_same EE2 SG2
H11 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 VB = VB
 < search.

Subgoal 8.5.25:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (recBuild RF)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recBuild RF) public
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
============================
 recVal VF = VB
 < case IsE.

Subgoal 8.5.25:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recBuild RF) public
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
============================
 recVal VF = VB
 < Lev: case Lev.

Subgoal 8.5.25:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF public
============================
 recVal VF = VB
 < EvB: case EvB.

Subgoal 8.5.25:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB VF RF VF1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF public
EvB : evalRecFields FE EE_B RF VF1 EE_B' OB
============================
 recVal VF = recVal VF1
 < apply IH_RF_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.25:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB RF VF1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF1) EE_A' OA @
EvA1 : evalRecFields FE EE_A RF VF1 EE_A' OA *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF public
EvB : evalRecFields FE EE_B RF VF1 EE_B' OB
============================
 recVal VF1 = recVal VF1
 < search.

Subgoal 8.5.26:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr (recFieldAccess Rec F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recFieldAccess Rec F) public
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
============================
 VA = VB
 < case IsE.

Subgoal 8.5.26:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recFieldAccess Rec F) public
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
============================
 VA = VB
 < Lev: case Lev.

Subgoal 8.5.26:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec public
============================
 VA = VB
 < EvB: case EvB.

Subgoal 8.5.26:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec public
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
============================
 VA = VB
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.5.26:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A Rec (recVal Fields1) EE_A' OA *
EvA2 : lookup Fields1 F VA
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec public
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
============================
 VA = VB
 < apply lookup_unique to EvA2 EvB1.

Subgoal 8.5.26:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VB EE_A' OA @
EvA1 : evalExpr FE EE_A Rec (recVal Fields1) EE_A' OA *
EvA2 : lookup Fields1 F VB
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec public
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
============================
 VB = VB
 < search.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC <unknown K evalExpr> public
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
============================
 VA = VB
 < Lev: case Lev.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
============================
 VA = VB
 < apply names_is to _ EvA1.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
============================
 VA = VB
 < apply names_is_sec to _ Lev.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 VA = VB
 < apply proj_expr_unique to Lev1 EvA2 _ _ _ _ _.

Subgoal 8.5.27.1:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 8.5.27.1:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NSA EvA1 Lev M.

Subgoal 8.5.27.1:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 8.5.27.2:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 8.5.27.2:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NSA EvA1 Lev M.

Subgoal 8.5.27.2:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 public
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 VA = VB
 < apply proj_expr_is to Lev1 _ _.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
============================
 VA = VB
 < NSB-: apply names_same_symmetric to NSB.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
============================
 VA = VB
 < NSAB: apply names_same_transitive to NSA NSB-.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
============================
 VA = VB
 < NamesB: apply names_exists to IsEE_B.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
============================
 VA = VB
 < apply names_is to _ EvA1.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
============================
 VA = VB
 < apply names_is to _ NamesB.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
============================
 VA = VB
 < PrB: apply proj_expr_other to EvA2 _ _ _ with
          L' = N.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 VA = VB
 < apply proj_expr_unique to EvA2 PrB _ _ _ _ _.

Subgoal 8.5.27.3:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 forall X, mem X N -> mem X Names
 < intros M.

Subgoal 8.5.27.3:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
============================
 mem X Names
 < NSBA: apply names_same_symmetric to NSAB.

Subgoal 8.5.27.3:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
NSBA : names_same EE_B EE_A
============================
 mem X Names
 < apply names_same_names to NSBA NamesB EvA1 M.

Subgoal 8.5.27.3:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
NSBA : names_same EE_B EE_A
H6 : mem X Names
============================
 mem X Names
 < search.

Subgoal 8.5.27.4:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 forall X, mem X Names -> mem X N
 < intros M.

Subgoal 8.5.27.4:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X Names
============================
 mem X N
 < apply names_same_names to NSAB EvA1 NamesB M.

Subgoal 8.5.27.4:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X Names
H6 : mem X N
============================
 mem X N
 < search.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 VA = VB
 < EvB': apply proj_evalExpr_forward to PrB NamesB _ _ _ EvB.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
============================
 VA = VB
 < EvA': apply proj_evalExpr_forward to EvA2 EvA1 _ _ _ EvA.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE'' EE''1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' VA EE''1 OA
EvA'1 : scopes_same EE_A' EE''1
============================
 VA = VB
 < apply evalExpr_unique to _ _ _ EvA' EvA3.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
============================
 V_P = VB
 < apply proj_expr_is to PrB _ _.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
============================
 V_P = VB
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA3 EvB'.

Subgoal 8.5.27:

Variables: SF SG PC FE EE_A EE_A' EE_B EE_B' VB OB Names EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VB EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' VB EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' public
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' VB EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
============================
 VB = VB
 < search.

Subgoal 8.6.1:

Variables: SF SG PC FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : levelRecFields SF SG PC nilRecFieldExprs public
EvA : evalRecFields FE EE_A' nilRecFieldExprs [] EE_A' [] @
EvB : evalRecFields FE EE_B nilRecFieldExprs VB EE_B' OB
============================
 [] = VB
 < case EvB.

Subgoal 8.6.1:

Variables: SF SG PC FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : levelRecFields SF SG PC nilRecFieldExprs public
EvA : evalRecFields FE EE_A' nilRecFieldExprs [] EE_A' [] @
============================
 [] = []
 < search.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) public
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 (F, V)::VRest = VB
 < case IsRF.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) public
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 (F, V)::VRest = VB
 < Lev: case Lev.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
============================
 (F, V)::VRest = VB
 < EvB: case EvB.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG EE1 EE2
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG EE1 EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply level_is to _ _ _ Lev.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
H9 : is_slev LE
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply levelRecFields_is to _ _ _ Lev1.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
H9 : is_slev LE
H10 : is_slev LRF
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply join_public to _ _ Lev2.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E public
Lev1 : levelRecFields SF SG PC Rest public
Lev2 : join public public public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
H9 : is_slev public
H10 : is_slev public
============================
 (F, V)::VRest = (F, V1)::VRest1
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest F Rest E EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V1 EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E public
Lev1 : levelRecFields SF SG PC Rest public
Lev2 : join public public public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
H9 : is_slev public
H10 : is_slev public
============================
 (F, V1)::VRest = (F, V1)::VRest1
 < apply IH_RF_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.6.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 F Rest E EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V1)::VRest1) EE_A' OA @
EvA1 : evalExpr FE EE_A E V1 EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest1 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E public
Lev1 : levelRecFields SF SG PC Rest public
Lev2 : join public public public
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : public_equiv SG 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 : names_same EE1 SG
H8 : names_same EE2 SG
H9 : is_slev public
H10 : is_slev public
============================
 (F, V1)::VRest1 = (F, V1)::VRest1
 < search.

Subgoal 8.6.3:

Variables: SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC <unknown K evalRecFields> public
EvA : evalRecFields FE EE_A <unknown K evalRecFields> VA EE_A' OA @
EvB : evalRecFields FE EE_B <unknown K evalRecFields> VB EE_B' OB
============================
 VA = VB
 < case Lev.

Subgoal 8.7.1:

Variables: SF SG PC Ls FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : levelArgs SF SG PC nilArgs Ls
EvA : evalArgs FE EE_A' nilArgs [] EE_A' [] @
EvB : evalArgs FE EE_B nilArgs VB EE_B' OB
============================
 level_arg_vals Ls [] VB
 < case EvB.

Subgoal 8.7.1:

Variables: SF SG PC Ls FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : levelArgs SF SG PC nilArgs Ls
EvA : evalArgs FE EE_A' nilArgs [] EE_A' [] @
============================
 level_arg_vals Ls [] []
 < case Lev.

Subgoal 8.7.1:

Variables: SF SG PC FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
EvA : evalArgs FE EE_A' nilArgs [] EE_A' [] @
============================
 level_arg_vals [] [] []
 < search.

Subgoal 8.7.2:

Variables: SF SG PC Ls FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args (consArgs E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC (consArgs E Rest) Ls
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 level_arg_vals Ls (V::VRest) VB
 < case IsA.

Subgoal 8.7.2:

Variables: SF SG PC Ls FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC (consArgs E Rest) Ls
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
============================
 level_arg_vals Ls (V::VRest) VB
 < Lev: case Lev.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E Rest1 L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 level_arg_vals (L::Rest1) (V::VRest) VB
 < EvB: case EvB.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply level_is to _ _ _ Lev.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply levelArgs_is to _ _ _ Lev1.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L
H9 : is_list is_slev Rest1
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < Or: apply is_slev_public_or_not to _ with
         L = L.

Subgoal 8.7.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L
H9 : is_list is_slev Rest1
Or : L = public \/ (L = public -> false)
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < N: case Or.

Subgoal 8.7.2.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E public
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_list is_slev Rest1
============================
 level_arg_vals (public::Rest1) (V::VRest) (V1::VRest1)
 < apply IH_E_L to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 8.7.2.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest Rest E Rest1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V1::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V1 EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E public
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_list is_slev Rest1
============================
 level_arg_vals (public::Rest1) (V1::VRest) (V1::VRest1)
 < apply IH_A_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.7.2.1:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest Rest E Rest1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V1::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V1 EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E public
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev public
H9 : is_list is_slev Rest1
H10 : level_arg_vals Rest1 VRest VRest1
============================
 level_arg_vals (public::Rest1) (V1::VRest) (V1::VRest1)
 < search.

Subgoal 8.7.2.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L
H9 : is_list is_slev Rest1
N : L = public -> false
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < apply IH_A_L to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 8.7.2.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : is_slev L
H9 : is_list is_slev Rest1
N : L = public -> false
H10 : level_arg_vals Rest1 VRest VRest1
============================
 level_arg_vals (L::Rest1) (V::VRest) (V1::VRest1)
 < search.

Subgoal 8.7.3:

Variables: SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         public_equiv SG' EE_A' EE_B'
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         public_equiv SG EE_A' EE_B'
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> public_equiv SG EE_A' EE_B'
IH_E_L : forall E SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           level SF SG PC E public -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
           VA = VB
IH_RF_L : forall RF SF SG PC FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
            is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
            is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
            is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
            secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
            levelRecFields SF SG PC RF public -> evalRecFields FE EE_A RF VA EE_A' OA * ->
            evalRecFields FE EE_B RF VB EE_B' OB -> VA = VB
IH_A_L : forall A SF SG PC Ls FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
           is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
           is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
           is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
           secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
           levelArgs SF SG PC A Ls -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
           level_arg_vals Ls VA VB
IsA : is_args <unknown K evalArgs>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC <unknown K evalArgs> Ls
EvA : evalArgs FE EE_A <unknown K evalArgs> VA EE_A' OA @
EvB : evalArgs FE EE_B <unknown K evalArgs> VB EE_B' OB
============================
 level_arg_vals Ls VA VB
 < case Lev.

Proof completed.
 < Extensible_Theorem
      stmt_not_public_no_output : forall S SF SG PC SG' FE Scope EE EE' O,
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) ->
         SFC : secFunCtxs SF FE ->
         NS : names_same (Scope::EE) SG ->
         Ev : evalStmt FE (Scope::EE) S EE' O ->
         Sec : secure SF SG PC S SG' ->
         NEq : (PC = public -> false) ->
         O = []
      on Ev as IH_S,
      expr_not_public_no_output : forall E SF SG PC L FE EE V EE' O,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         SFC : secFunCtxs SF FE ->
         NS : names_same EE SG ->
         Ev : evalExpr FE EE E V EE' O ->
         Lev : level SF SG PC E L ->
         NEq : (PC = public -> false) ->
         O = []
      on Ev as IH_E,
      args_not_public_no_output : forall A SF SG PC L FE EE V EE' O,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         SFC : secFunCtxs SF FE ->
         NS : names_same EE SG ->
         Ev : evalArgs FE EE A V EE' O ->
         Lev : levelArgs SF SG PC A L ->
         NEq : (PC = public -> false) ->
         O = []
      on Ev as IH_A,
      recFields_not_public_no_output : forall RF SF SG PC L FE EE V EE' O,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         SFC : secFunCtxs SF FE ->
         NS : names_same EE SG ->
         Ev : evalRecFields FE EE RF V EE' O ->
         Lev : levelRecFields SF SG PC RF L ->
         NEq : (PC = public -> false) ->
         O = []
      on Ev as IH_RF.

Subgoal 1:

Variables: S SF SG PC SG' FE Scope EE EE' O
IsS : is_stmt S
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) S EE' O
Sec : secure SF SG PC S SG'
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
 < search.

Subgoal 2:

Variables: E SF SG PC L FE EE V EE' O
IsE : is_expr E
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE E V EE' O
Lev : level SF SG PC E L
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
 < search.

Subgoal 3:

Variables: A SF SG PC L FE EE V EE' O
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE A V EE' O
Lev : levelArgs SF SG PC A L
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
 < search.

Subgoal 4:

Variables: RF SF SG PC L FE EE V EE' O
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE RF V EE' O
Lev : levelRecFields SF SG PC RF L
NEq : PC = public -> false
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
 < search.

Subgoal 5.1.1:

Variables: SF SG PC SG' FE Scope EE
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
Sec : secure SF SG PC noop SG'
NEq : PC = public -> false
============================
 [] = []
 < search.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Sec : secure SF SG PC (seq S1 S2) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsS.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Sec : secure SF SG PC (seq S1 S2) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 O3 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O3 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 [] *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
============================
 O = []
 < case Ev3.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 [] *
Ev2 : evalStmt FE EE3 S2 EE' O *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
============================
 O = []
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 [] *
Ev2 : evalStmt FE EE3 S2 EE' O *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply secure_is to _ _ _ Sec.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 [] *
Ev2 : evalStmt FE EE3 S2 EE' O *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list (is_pair is_string is_slev)) SG3
============================
 O = []
 < NS': apply secure_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 [] *
Ev2 : evalStmt FE EE3 S2 EE' O *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list (is_pair is_string is_slev)) SG3
NS' : names_same EE3 SG3
============================
 O = []
 < case NS.

Subgoal 5.1.2:

Variables: SF PC SG' FE Scope EE EE' O EE3 S2 S1 SG3 BRest B
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 [] *
Ev2 : evalStmt FE EE3 S2 EE' O *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list (is_pair is_string is_slev)) SG3
NS' : names_same EE3 SG3
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
============================
 O = []
 < apply secure_older_scopes to _ _ _ Sec.

Subgoal 5.1.2:

Variables: SF PC SG' FE Scope EE EE' O EE3 S2 S1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 EE3 [] *
Ev2 : evalStmt FE EE3 S2 EE' O *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NS' : names_same EE3 (Scope'::BRest)
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
H8 : forall X L, lookup B X L -> lookup Scope' X L
============================
 O = []
 < case NS' (keep).

Subgoal 5.1.2:

Variables: SF PC SG' FE Scope EE EE' O S2 S1 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) [] *
Ev2 : evalStmt FE (A::ARest) S2 EE' O *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NS' : names_same (A::ARest) (Scope'::BRest)
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
H8 : forall X L, lookup B X L -> lookup Scope' X L
H9 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H10 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H11 : names_same ARest BRest
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev2 Sec1 _.

Subgoal 5.1.2:

Variables: SF PC SG' FE Scope EE EE' S2 S1 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' [] @
NEq : PC = public -> false
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) [] *
Ev2 : evalStmt FE (A::ARest) S2 EE' [] *
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NS' : names_same (A::ARest) (Scope'::BRest)
H5 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H6 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H7 : names_same EE BRest
H8 : forall X L, lookup B X L -> lookup Scope' X L
H9 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H10 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H11 : names_same ARest BRest
============================
 [] = []
 < search.

Subgoal 5.1.3:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (declare Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 O = []
 < case IsS.

Subgoal 5.1.3:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (declare Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.3:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.3:

Variables: SF FE Scope EE EE2 Scope1 V X E Ty SG1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) [] @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) [] *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
============================
 [] = []
 < search.

Subgoal 5.1.4:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 E X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Sec : secure SF SG PC (assign X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
============================
 O = []
 < case IsS.

Subgoal 5.1.4:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 E X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Sec : secure SF SG PC (assign X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.4.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 E X L
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.4.1:

Variables: SF PC SG' FE Scope EE EE' V EE3 E X L
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 [] *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
============================
 [] = []
 < search.

Subgoal 5.1.4.2:

Variables: SF SG' FE Scope EE EE' O V EE3 E X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.4.2:

Variables: SF SG' FE Scope EE EE' V EE3 E X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' [] @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 [] *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
============================
 [] = []
 < search.

Subgoal 5.1.5:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
============================
 O = []
 < case IsS.

Subgoal 5.1.5:

Variables: SF SG PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.5.1:

Variables: SF PC SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec L
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.5.1:

Variables: SF PC SG' FE Scope EE EE' V EE3 FieldVals NewVals E Fields Rec L
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 [] *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
============================
 [] = []
 < search.

Subgoal 5.1.5.2:

Variables: SF SG' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.5.2:

Variables: SF SG' FE Scope EE EE' V EE3 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' [] @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V EE3 [] *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
============================
 [] = []
 < search.

Subgoal 5.1.6:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsS.

Subgoal 5.1.6:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 O = []
 < case Ev3.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
============================
 O = []
 < apply join_is to _ _ Sec1.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
============================
 O = []
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
============================
 O = []
 < apply names_same_add_scope to NS'.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 O = []
 < assert Sl1 = public -> false.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev public
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 5.1.6.1:

Variables: SF SG' FE Scope EE EE' O EE3 Scope1 El Th Cond SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 false
 < backchain NEq.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
H8 : Sl1 = public -> false
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev2 Sec2 _.

Subgoal 5.1.6:

Variables: SF PC SG' FE Scope EE EE' EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') [] *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
H8 : Sl1 = public -> false
============================
 [] = []
 < search.

Subgoal 5.1.7:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsS.

Subgoal 5.1.7:

Variables: SF SG PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 O3 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 O = []
 < case Ev3.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
============================
 O = []
 < apply join_is to _ _ Sec1.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
============================
 O = []
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
============================
 O = []
 < apply names_same_add_scope to NS'.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 O = []
 < assert Sl1 = public -> false.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev public
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 5.1.7.1:

Variables: SF SG' FE Scope EE EE' O EE3 Scope1 El Th Cond SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
============================
 false
 < backchain NEq.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' O EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
H8 : Sl1 = public -> false
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev2 Sec3 _.

Subgoal 5.1.7:

Variables: SF PC SG' FE Scope EE EE' EE3 Scope1 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 [] *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') [] *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L
H6 : is_slev Sl1
NS' : names_same EE3 SG'
H7 : names_same ([]::EE3) ([]::SG')
H8 : Sl1 = public -> false
============================
 [] = []
 < search.

Subgoal 5.1.8:

Variables: SF SG PC SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
============================
 O = []
 < case IsS.

Subgoal 5.1.8:

Variables: SF SG PC SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 O = []
 < Sec: case Sec (keep).

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec1 _.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 O3 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : [] ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
============================
 O = []
 < case Ev4.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O12 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O12 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O = []
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev1 Sec1.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O12 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
============================
 O = []
 < apply names_same_add_scope to NS'.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 O4 O12 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O12 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev2 Sec2 _.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 O4 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev5 : [] ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
============================
 O = []
 < case Ev5.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
============================
 O = []
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 O = []
 < case IsEE4+.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 O = []
 < NS+: apply secure_eval_names_same to _ _ _ _ _ _ Ev2 Sec2.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 Body Cond L Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope2::SG2)
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
NS+ : names_same (Scope1::EE4) (Scope2::SG2)
============================
 O = []
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 Body Cond L Scope'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
NS+ : names_same (Scope1::EE4) (Scope'::SG')
H7 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 O = []
 < NS-: case NS+.

Subgoal 5.1.8.1:

Variables: SF SG' FE Scope EE EE' O EE2 Scope1 EE4 Body Cond L Scope'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' private (while Cond Body) SG'
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope'::SG')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 SG'
H4 : names_same ([]::EE2) ([]::SG')
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X L, lookup [] X L -> lookup Scope' X L
NS- : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS-2 : names_same EE4 SG'
============================
 O = []
 < case NS.

Subgoal 5.1.8.1:

Variables: SF FE Scope EE EE' O EE2 Scope1 EE4 Body Cond L Scope' BRest B
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) [] *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 (B::BRest)
H4 : names_same ([]::EE2) ([]::(B::BRest))
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) EE4
H7 : forall X L, lookup [] X L -> lookup Scope' X L
NS- : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS-2 : names_same EE4 (B::BRest)
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
============================
 O = []
 < case NS-2 (keep).

Subgoal 5.1.8.1:

Variables: SF FE Scope EE EE' O EE2 Scope1 Body Cond L Scope' BRest B ARest A
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::(A::ARest)) [] *
Ev3 : evalStmt FE (A::ARest) (while Cond Body) EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 (B::BRest)
H4 : names_same ([]::EE2) ([]::(B::BRest))
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H7 : forall X L, lookup [] X L -> lookup Scope' X L
NS- : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS-2 : names_same (A::ARest) (B::BRest)
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
H11 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H12 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H13 : names_same ARest BRest
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev3 Sec _.

Subgoal 5.1.8.1:

Variables: SF FE Scope EE EE' EE2 Scope1 Body Cond L Scope' BRest B ARest A
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' [] @
Sec : secure SF (B::BRest) private (while Cond Body) (B::BRest)
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 [] *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::(A::ARest)) [] *
Ev3 : evalStmt FE (A::ARest) (while Cond Body) EE' [] *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) private Cond L
Sec2 : secure SF ([]::(B::BRest)) private Body (Scope'::(B::BRest))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
NS' : names_same EE2 (B::BRest)
H4 : names_same ([]::EE2) ([]::(B::BRest))
H5 : is_list (is_pair is_string is_value) Scope1
H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H7 : forall X L, lookup [] X L -> lookup Scope' X L
NS- : forall X IA, mem (X, IA) Scope1 -> exists IB, mem (X, IB) Scope'
NS-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope1
NS-2 : names_same (A::ARest) (B::BRest)
H8 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H9 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H10 : names_same EE BRest
H11 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H12 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H13 : names_same ARest BRest
============================
 [] = []
 < search.

Subgoal 5.1.8.2:

Variables: SF SG' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Scope2 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG' public (while Cond Body) SG'
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope2::SG2)
============================
 O = []
 < apply NEq to _.

Subgoal 5.1.9:

Variables: SF SG PC SG' FE Scope EE EE' O Body Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
============================
 O = []
 < case IsS.

Subgoal 5.1.9:

Variables: SF SG PC SG' FE Scope EE EE' O Body Cond
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Sec : secure SF SG PC (while Cond Body) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.9.1:

Variables: SF SG' FE Scope EE EE' O Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec : level SF SG' private Cond L
Sec1 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.9.1:

Variables: SF SG' FE Scope EE EE' Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' [] @
NEq : private = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' [] *
H1 : is_expr Cond
H2 : is_stmt Body
Sec : level SF SG' private Cond L
Sec1 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 [] = []
 < search.

Subgoal 5.1.9.2:

Variables: SF SG' FE Scope EE EE' O Body Cond Scope1 SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Sec : level SF SG' public Cond public
Sec1 : secure SF ([]::SG') public Body (Scope1::SG2)
============================
 O = []
 < apply NEq to _.

Subgoal 5.1.10:

Variables: SF SG PC SG' FE Scope EE EE' O Scope1 S1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Sec : secure SF SG PC (scopeStmt S1) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
============================
 O = []
 < case IsS.

Subgoal 5.1.10:

Variables: SF SG PC SG' FE Scope EE EE' O Scope1 S1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Sec : secure SF SG PC (scopeStmt S1) SG'
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.10:

Variables: SF PC SG' FE Scope EE EE' O Scope1 S1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope2::SG')
============================
 O = []
 < apply names_same_add_scope to NS.

Subgoal 5.1.10:

Variables: SF PC SG' FE Scope EE EE' O Scope1 S1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope2::SG')
H2 : names_same ([]::(Scope::EE)) ([]::SG')
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.10:

Variables: SF PC SG' FE Scope EE EE' Scope1 S1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' [] @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') [] *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope2::SG')
H2 : names_same ([]::(Scope::EE)) ([]::SG')
============================
 [] = []
 < search.

Subgoal 5.1.11:

Variables: SF SG PC SG' FE Scope EE EE' O I O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 O = []
 < case Sec.

Subgoal 5.1.11:

Variables: SF SG' FE Scope EE EE' O I O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : level SF SG' public E public
============================
 O = []
 < apply NEq to _.

Subgoal 5.1.12:

Variables: SF SG PC SG' FE Scope EE EE' O O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 O = []
 < case Sec.

Subgoal 5.1.12:

Variables: SF SG' FE Scope EE EE' O O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : level SF SG' public E public
============================
 O = []
 < apply NEq to _.

Subgoal 5.1.13:

Variables: SF SG PC SG' FE Scope EE EE' O O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 O = []
 < case Sec.

Subgoal 5.1.13:

Variables: SF SG' FE Scope EE EE' O O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : level SF SG' public E public
============================
 O = []
 < apply NEq to _.

Subgoal 5.1.14:

Variables: SF SG PC SG' FE Scope EE EE' O S1 O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Sec : secure SF SG PC (printVal E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 O = []
 < case Sec.

Subgoal 5.1.14:

Variables: SF SG' FE Scope EE EE' O S1 O2 E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : level SF SG' public E public
============================
 O = []
 < apply NEq to _.

Subgoal 5.1.15:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty L
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt (secdecl L Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (secdecl L Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 O = []
 < case IsS.

Subgoal 5.1.15:

Variables: SF SG PC SG' FE Scope EE O EE2 Scope1 V X E Ty L
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) (secdecl L Ty X E) (((X, V)::Scope1)::EE2) O @
Sec : secure SF SG PC (secdecl L Ty X E) SG'
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.15.1:

Variables: SF PC FE Scope EE O EE2 Scope1 V X E Ty L1 SG1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) O @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Sec _.

Subgoal 5.1.15.1:

Variables: SF PC FE Scope EE EE2 Scope1 V X E Ty L1 SG1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl private Ty X E) (((X, V)::Scope1)::EE2) [] @
NEq : PC = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) [] *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) PC E L1
Sec1 : no_lookup Scope2 X
============================
 [] = []
 < search.

Subgoal 5.1.15.2:

Variables: SF FE Scope EE O EE2 Scope1 V X E Ty SG1 Scope2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope2::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) (Scope2::SG1)
Ev : evalStmt FE (Scope::EE) (secdecl public Ty X E) (((X, V)::Scope1)::EE2) O @
NEq : public = public -> false
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope2::SG1) public E public
Sec1 : no_lookup Scope2 X
============================
 O = []
 < apply NEq to _.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Sec : secure SF SG PC <unknown K evalStmt> SG'
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
============================
 O = []
 < Sec: case Sec.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
============================
 O = []
 < apply names_is to _ Ev1.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
============================
 O = []
 < apply names_is_sec to _ Sec.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 O = []
 < apply proj_stmt_unique to Sec1 Ev2 _ _ _ _ _.

Subgoal 5.1.16.1:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.1.16.1:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NS Ev1 Sec M.

Subgoal 5.1.16.1:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.1.16.2:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.1.16.2:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NS Ev1 Sec M.

Subgoal 5.1.16.2:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 O = []
 < apply proj_stmt_is to Sec1 _ _.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
============================
 O = []
 < NS': apply secure_eval_names_same to _ _ _ _ _ _ Ev3 Sec2.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
NS : names_same (Scope::EE) SG
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
============================
 O = []
 < case NS.

Subgoal 5.1.16:

Variables: SF PC SG' FE Scope EE EE' O Names S_P EE_P O_P Names1 BRest B
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P SG'
H4 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H6 : names_same EE BRest
============================
 O = []
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.1.16:

Variables: SF PC FE Scope EE EE' O Names S_P EE_P O_P Names1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same EE_P (Scope'::BRest)
H4 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H6 : names_same EE BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
============================
 O = []
 < case NS' (keep).

Subgoal 5.1.16:

Variables: SF PC FE Scope EE EE' O Names S_P O_P Names1 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'::BRest)
H4 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H6 : names_same EE BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
H8 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H9 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H10 : names_same ARest BRest
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev3 Sec2 _.

Subgoal 5.1.16:

Variables: SF PC FE Scope EE EE' O Names S_P Names1 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) [] *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'::BRest)
H4 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H6 : names_same EE BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
H8 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H9 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H10 : names_same ARest BRest
============================
 O = []
 < SS: apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.1.16:

Variables: SF PC FE Scope EE EE' O Names S_P Names1 BRest B Scope' ARest A EE''
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) [] *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'::BRest)
H4 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H6 : names_same EE BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
H8 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H9 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H10 : names_same ARest BRest
SS : evalStmt FE (Scope::EE) S_P EE'' O
SS1 : scopes_same EE' EE''
============================
 O = []
 < apply evalStmt_unique to _ _ _ SS Ev3.

Subgoal 5.1.16:

Variables: SF PC FE Scope EE EE' Names S_P Names1 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
SFC : secFunCtxs SF FE
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' [] @
NEq : PC = public -> false
Ev1 : names (Scope::EE) Names
Ev2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P (A::ARest) [] *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
NS' : names_same (A::ARest) (Scope'::BRest)
H4 : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) Scope
H6 : names_same EE BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
H8 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H9 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H10 : names_same ARest BRest
SS : evalStmt FE (Scope::EE) S_P (A::ARest) []
SS1 : scopes_same EE' (A::ARest)
============================
 [] = []
 < search.

Subgoal 5.2.1:

Variables: SF SG PC L FE EE' I
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
SFC : secFunCtxs SF FE
NS : names_same EE' SG
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
Lev : level SF SG PC (num I) L
NEq : PC = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (plus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (plus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 + I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 + I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 + I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE EE' I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' [] *
Ev3 : I1 + I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (minus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (minus E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 - I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 - I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 - I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE EE' I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' [] *
Ev3 : I1 - I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (mult E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (mult E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 * I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 * I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 * I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE EE' I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' [] *
Ev3 : I1 * I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (div E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Lev : level SF SG PC (div E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 O3 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 / I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 / I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 / I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE EE' I1 EE3 I2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' [] *
Ev3 : I1 / I2 = I
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.6:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
SFC : secFunCtxs SF FE
NS : names_same EE' SG
Ev : evalExpr FE EE' true trueVal EE' [] @
Lev : level SF SG PC true L
NEq : PC = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.7:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
SFC : secFunCtxs SF FE
NS : names_same EE' SG
Ev : evalExpr FE EE' false falseVal EE' [] @
Lev : level SF SG PC false L
NEq : PC = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < case Ev3.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 O = []
 < apply join_is to _ _ Lev1.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 O = []
 < assert Sl1 = public -> false.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.8.1:

Variables: SF SG L FE EE EE' O EE3 E2 E1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE EE' EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) trueVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' [] *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 O = []
 < case IsE.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE EE' E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' [] *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 [] = []
 < search.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Lev : level SF SG PC (and E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < case Ev3.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 O = []
 < apply join_is to _ _ Lev1.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 O = []
 < assert Sl1 = public -> false.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.10.1:

Variables: SF SG L FE EE EE' O EE3 E2 E1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE EE' EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (and E1 E2) falseVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' [] *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 O = []
 < case IsE.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' O E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' O E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE EE' E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' [] *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 [] = []
 < search.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < case Ev3.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 O = []
 < apply join_is to _ _ Lev1.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 O = []
 < assert Sl1 = public -> false.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.12.1:

Variables: SF SG L FE EE EE' O EE3 E2 E1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE EE' EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) trueVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 trueVal EE' [] *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Lev : level SF SG PC (or E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 O3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < case Ev3.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
============================
 O = []
 < apply join_is to _ _ Lev1.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 O = []
 < assert Sl1 = public -> false.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.13.1:

Variables: SF SG L FE EE EE' O EE3 E2 E1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : public = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev public
H6 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' O EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev2 _.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE EE' EE3 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (or E1 E2) falseVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE3 [] *
Ev2 : evalExpr FE EE3 E2 falseVal EE' [] *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_slev L2
H6 : is_slev Sl1
H7 : Sl1 = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 O = []
 < case IsE.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE EE' E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) trueVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 falseVal EE' [] *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 [] = []
 < search.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 O = []
 < case IsE.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Lev : level SF SG PC (not E1) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' O E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE EE' E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (not E1) falseVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 trueVal EE' [] *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 [] = []
 < search.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 > I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 > I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 > I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE EE' I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' [] *
Ev3 : I1 > I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Lev : level SF SG PC (greater E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 <= I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 <= I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' O I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O *
Ev3 : I1 <= I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE EE' I1 EE3 I2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' [] *
Ev3 : I1 <= I2
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev3.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V1 EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V1 EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' O V1 EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V1 EE' O *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE EE' V1 EE3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V1 EE' [] *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Lev : level SF SG PC (eq E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 V2 O3 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 V2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V2 EE' O *
Ev3 : V1 = V2 -> false
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 V2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V2 EE' O *
Ev3 : V1 = V2 -> false
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' O V1 EE3 V2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V2 EE' O *
Ev3 : V1 = V2 -> false
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE EE' V1 EE3 V2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 V1 EE3 [] *
Ev2 : evalExpr FE EE3 E2 V2 EE' [] *
Ev3 : V1 = V2 -> false
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.20:

Variables: SF SG PC L FE EE' S
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
SFC : secFunCtxs SF FE
NS : names_same EE' SG
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
Lev : level SF SG PC (stringLit S) L
NEq : PC = public -> false
============================
 [] = []
 < search.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Lev : level SF SG PC (appString E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Lev : level SF SG PC (appString E1 E2) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 S2 O3 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : [] ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < case Ev4.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 S2 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O *
Ev3 : S1 ++ S2 = S
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 S2 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O *
Ev3 : S1 ++ S2 = S
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' O S1 EE3 S2 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O *
Ev3 : S1 ++ S2 = S
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE EE' S1 EE3 S2 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 [] *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' [] *
Ev3 : S1 ++ S2 = S
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.2.22:

Variables: SF SG PC L FE V EE' X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
SFC : secFunCtxs SF FE
NS : names_same EE' SG
Ev : evalExpr FE EE' (name X) V EE' [] @
Lev : level SF SG PC (name X) L
NEq : PC = public -> false
Ev1 : lookupScopes X EE' V
============================
 [] = []
 < search.

Subgoal 5.2.23:

Variables: SF SG PC L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Lev : level SF SG PC (call Fun Args) L
NEq : PC = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
============================
 O = []
 < case IsE.

Subgoal 5.2.23:

Variables: SF SG PC L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Lev : level SF SG PC (call Fun Args) L
NEq : PC = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 O = []
 < apply IH_A to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 O3 Args Fun ArgLevs
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : [] ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 O = []
 < case Ev5.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 O = []
 < apply evalArgs_isValue to _ _ _ Ev2.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
============================
 O = []
 < FR: case SFC (keep).

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 O = []
 < FS: apply FR to Lev Ev1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
============================
 O = []
 < IsFP: apply lookup_is_value_funCtx to _ Ev1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsFP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body)))
============================
 O = []
 < IsF: case IsFP.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body))
============================
 O = []
 < IsF: case IsF1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 O = []
 < IsF: case IsF2.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
============================
 O = []
 < apply zip_is to _ _ Ev3.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv
============================
 O = []
 < apply zip_names_same to _ _ with
     ZA = (RetVar, RVVal)::InitEnv ZB = (RetVar, private)::ZP.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv
H5 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
============================
 O = []
 < apply levelArgs_is to _ _ _ Lev1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv
H5 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
H6 : is_list is_slev ArgLevs
============================
 O = []
 < apply zip_is_sec to _ _ _ with
     Z = (RetVar, private)::ZP.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' O RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv
H5 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
H6 : is_list is_slev ArgLevs
H7 : is_list (is_pair is_string is_slev) ((RetVar, private)::ZP)
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev4 FS1 _.

Subgoal 5.2.23.1:

Variables: SF SG FE EE V EE' RetVar RVVal ArgNames Body ArgVals InitEnv EE3 Args Fun ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' [] @
NEq : private = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' [] *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 [] *
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv
H5 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
H6 : is_list is_slev ArgLevs
H7 : is_list (is_pair is_string is_slev) ((RetVar, private)::ZP)
============================
 [] = []
 < search.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun ArgLevs
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (call Fun Args) V EE' O @
NEq : public = public -> false
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
============================
 O = []
 < apply NEq to _.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Lev : level SF SG PC (stmtExpr S E1) L
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsE.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Lev : level SF SG PC (stmtExpr S E1) L
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
============================
 O = []
 < apply names_same_add_scope to NS.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 O2 Scope O3 E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
============================
 O = []
 < apply IH_S to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 Scope O3 E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 [] *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : [] ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
============================
 O = []
 < case Ev3.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 Scope E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 [] *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O *
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
============================
 O = []
 < apply secure_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 Scope E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 [] *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O *
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
============================
 O = []
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 Scope E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 [] *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O *
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply secure_is to _ _ _ Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' O EE3 Scope E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 [] *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O *
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE V EE' EE3 Scope E1 S SG2
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (stmtExpr S E1) V EE' [] @
NEq : PC = public -> false
Ev1 : evalStmt FE ([]::EE) S EE3 [] *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') [] *
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
H3 : names_same ([]::EE) ([]::SG)
H4 : names_same EE3 SG2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 [] = []
 < search.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (recBuild RF)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Lev : level SF SG PC (recBuild RF) L
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' O *
============================
 O = []
 < case IsE.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Lev : level SF SG PC (recBuild RF) L
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' O VF RF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
============================
 O = []
 < apply IH_RF to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE EE' VF RF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' [] @
NEq : PC = public -> false
Ev1 : evalRecFields FE EE RF VF EE' [] *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
============================
 [] = []
 < search.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr (recFieldAccess Rec F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Lev : level SF SG PC (recFieldAccess Rec F) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
============================
 O = []
 < case IsE.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Lev : level SF SG PC (recFieldAccess Rec F) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' O Fields F Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE V EE' Fields F Rec
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' [] *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
============================
 [] = []
 < search.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Lev : level SF SG PC <unknown K evalExpr> L
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
============================
 O = []
 < Lev: case Lev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
============================
 O = []
 < apply names_is to _ Ev1.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
============================
 O = []
 < apply names_is_sec to _ Lev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 O = []
 < apply proj_expr_unique to Lev1 Ev2 _ _ _ _ _.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NS Ev1 Lev M.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NS Ev1 Lev M.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 O = []
 < apply proj_expr_is to Lev1 _ _.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
============================
 O = []
 < NS': apply level_eval_names_same to _ _ _ _ _ _ Ev3 Lev2.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev3 Lev2 _.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P [] *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
============================
 O = []
 < SS: apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE V EE' O Names E_P V_P EE_P Names1 EE''
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P [] *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
SS : evalExpr FE EE E_P V EE'' O
SS1 : scopes_same EE' EE''
============================
 O = []
 < apply evalExpr_unique to _ _ _ SS Ev3.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE EE' Names E_P V_P EE_P Names1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' [] @
NEq : PC = public -> false
Ev1 : names EE Names
Ev2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P [] *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NS' : names_same EE_P SG
SS : evalExpr FE EE E_P V_P EE_P []
SS1 : scopes_same EE' EE_P
============================
 [] = []
 < search.

Subgoal 5.3.1:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
SFC : secFunCtxs SF FE
NS : names_same EE' SG
Ev : evalArgs FE EE' nilArgs [] EE' [] @
Lev : levelArgs SF SG PC nilArgs L
NEq : PC = public -> false
============================
 [] = []
 < search.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsA : is_args (consArgs E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Lev : levelArgs SF SG PC (consArgs E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsA.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Lev : levelArgs SF SG PC (consArgs E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 O = []
 < Lev: case Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O2 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 O3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 O = []
 < case Ev3.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalArgs FE EE3 Rest VRest EE' O *
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalArgs FE EE3 Rest VRest EE' O *
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
H3 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' O EE3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalArgs FE EE3 Rest VRest EE' O *
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_A to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.3.2:

Variables: SF SG PC FE EE EE' EE3 VRest V1 Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalArgs FE EE3 Rest VRest EE' [] *
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
H3 : names_same EE3 SG
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.3.3:

Variables: SF SG PC L FE EE V EE' O
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsA : is_args <unknown K evalArgs>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
Lev : levelArgs SF SG PC <unknown K evalArgs> L
NEq : PC = public -> false
============================
 O = []
 < case Lev.

Subgoal 5.4.1:

Variables: SF SG PC L FE EE'
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
SFC : secFunCtxs SF FE
NS : names_same EE' SG
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
Lev : levelRecFields SF SG PC nilRecFieldExprs L
NEq : PC = public -> false
============================
 [] = []
 < search.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = []
 < case IsRF.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 O = []
 < Lev: case Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O2 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
============================
 O = []
 < apply IH_E to _ _ _ _ _ _ _ _ Ev1 Lev _.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 O3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : [] ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
============================
 O = []
 < case Ev3.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O *
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
============================
 O = []
 < apply level_eval_names_same to _ _ _ _ _ _ Ev1 Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O *
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
H4 : names_same EE3 SG
============================
 O = []
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' O EE3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O *
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
H4 : names_same EE3 SG
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = []
 < apply IH_RF to _ _ _ _ _ _ _ _ Ev2 Lev1 _.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE EE' EE3 VRest V1 F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' [] @
NEq : PC = public -> false
Ev1 : evalExpr FE EE E V1 EE3 [] *
Ev2 : evalRecFields FE EE3 Rest VRest EE' [] *
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
H4 : names_same EE3 SG
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 [] = []
 < search.

Subgoal 5.4.3:

Variables: SF SG PC L FE EE V EE' O
IH_S : forall S SF SG PC SG' FE Scope EE EE' O,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> secFunCtxs SF FE ->
         names_same (Scope::EE) SG -> evalStmt FE (Scope::EE) S EE' O * -> secure SF SG PC S SG' ->
         (PC = public -> false) -> O = []
IH_E : forall E SF SG PC L FE EE V EE' O,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalExpr FE EE E V EE' O * -> level SF SG PC E L ->
         (PC = public -> false) -> O = []
IH_A : forall A SF SG PC L FE EE V EE' O,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
         names_same EE SG -> evalArgs FE EE A V EE' O * -> levelArgs SF SG PC A L ->
         (PC = public -> false) -> O = []
IH_RF : forall RF SF SG PC L FE EE V EE' O,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE -> secFunCtxs SF FE ->
          names_same EE SG -> evalRecFields FE EE RF V EE' O * -> levelRecFields SF SG PC RF L ->
          (PC = public -> false) -> O = []
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE : is_list (is_list (is_pair is_string is_value)) EE
SFC : secFunCtxs SF FE
NS : names_same EE SG
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
Lev : levelRecFields SF SG PC <unknown K evalRecFields> L
NEq : PC = public -> false
============================
 O = []
 < case Lev.

Proof completed.
 < Extensible_Theorem
      secure_output : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         IsS : is_stmt S ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same (ScopeA::EE_A) SG ->
         NSB : names_same (ScopeB::EE_B) SG ->
         PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) ->
         Sec : secure SF SG PC S SG' ->
         EvA : evalStmt FE (ScopeA::EE_A) S EE_A' OA ->
         EvB : evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
      on EvA as IH_S,
      expr_secure_output : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsE : is_expr E ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : level SF SG PC E L ->
         EvA : evalExpr FE EE_A E VA EE_A' OA ->
         EvB : evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
      on EvA as IH_E,
      args_secure_output : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsA : is_args A ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : levelArgs SF SG PC A L ->
         EvA : evalArgs FE EE_A A VA EE_A' OA ->
         EvB : evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
      on EvA as IH_A,
      recFields_secure_output : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         IsRF : is_recFieldExprs RF ->
         IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         IsSG : is_list (is_list (is_pair is_string is_slev)) SG ->
         IsPC : is_slev PC ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A ->
         IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B ->
         SFC : secFunCtxs SF FE ->
         NSA : names_same EE_A SG ->
         NSB : names_same EE_B SG ->
         PE : public_equiv SG EE_A EE_B ->
         Lev : levelRecFields SF SG PC RF L ->
         EvA : evalRecFields FE EE_A RF VA EE_A' OA ->
         EvB : evalRecFields FE EE_B RF VB EE_B' OB ->
         OA = OB
      on EvA as IH_RF.

Subgoal 1:

Variables: S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB
IsS : is_stmt S
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC S SG'
EvA : evalStmt FE (ScopeA::EE_A) S EE_A' OA
EvB : evalStmt FE (ScopeB::EE_B) S EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) /\ is_stmt S)
 < search.

Subgoal 2:

Variables: E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsE : is_expr E
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC E L
EvA : evalExpr FE EE_A E VA EE_A' OA
EvB : evalExpr FE EE_B E VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_expr E)
 < search.

Subgoal 3:

Variables: A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsA : is_args A
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC A L
EvA : evalArgs FE EE_A A VA EE_A' OA
EvB : evalArgs FE EE_B A VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_args A)
 < search.

Subgoal 4:

Variables: RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IsRF : is_recFieldExprs RF
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC RF L
EvA : evalRecFields FE EE_A RF VA EE_A' OA
EvB : evalRecFields FE EE_B RF VB EE_B' OB
============================
 is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\
 (is_list (is_list (is_pair is_string is_value)) EE_A /\ is_recFieldExprs RF)
 < search.

Subgoal 5.1.1:

Variables: SF SG PC SG' FE ScopeA EE_A ScopeB EE_B EE_B' OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC noop SG'
EvA : evalStmt FE (ScopeA::EE_A) noop (ScopeA::EE_A) [] @
EvB : evalStmt FE (ScopeB::EE_B) noop EE_B' OB
============================
 [] = OB
 < case EvB.

Subgoal 5.1.1:

Variables: SF SG PC SG' FE ScopeA EE_A ScopeB EE_B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt noop
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC noop SG'
EvA : evalStmt FE (ScopeA::EE_A) noop (ScopeA::EE_A) [] @
============================
 [] = []
 < search.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (seq S1 S2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (seq S1 S2) SG'
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (seq S1 S2) EE_B' OB
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (seq S1 S2) SG'
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (seq S1 S2) EE_B' OB
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (seq S1 S2) EE_B' OB
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O1 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply stmt_secure to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG3 EE1 EE2
============================
 OA = OB
 < apply evalStmt_isCtx to _ _ _ EvA1.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG3 EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalStmt_isCtx to _ _ _ EvB.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG3 EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply secure_is to _ _ _ Sec.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG3 EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : is_list (is_list (is_pair is_string is_slev)) SG3
============================
 OA = OB
 < NSA': apply secure_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG3 EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : is_list (is_list (is_pair is_string is_slev)) SG3
NSA' : names_same EE1 SG3
============================
 OA = OB
 < NSB': apply secure_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 5.1.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF SG PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG3 EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : is_list (is_list (is_pair is_string is_slev)) SG3
NSA' : names_same EE1 SG3
NSB' : names_same EE2 SG3
============================
 OA = OB
 < case NSA.

Subgoal 5.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 SG3 EE2 O3 O4 BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 SG3
Sec1 : secure SF SG3 PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv SG3 EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : is_list (is_list (is_pair is_string is_slev)) SG3
NSA' : names_same EE1 SG3
NSB' : names_same EE2 SG3
H7 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H9 : names_same EE_A BRest
============================
 OA = OB
 < apply secure_older_scopes to _ _ _ Sec.

Subgoal 5.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O2 S2 S1 EE2 O3 O4 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 EE1 O3 *
EvA2 : evalStmt FE EE1 S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv (Scope'::BRest) EE1 EE2
H4 : is_list (is_list (is_pair is_string is_value)) EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same EE1 (Scope'::BRest)
NSB' : names_same EE2 (Scope'::BRest)
H7 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H9 : names_same EE_A BRest
H10 : forall X L, lookup B X L -> lookup Scope' X L
============================
 OA = OB
 < case NSA' (keep).

Subgoal 5.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O2 S2 S1 EE2 O3 O4 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O3 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 EE2 O3
EvB1 : evalStmt FE EE2 S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv (Scope'::BRest) (A::ARest) EE2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) EE2
H6 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same EE2 (Scope'::BRest)
H7 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H9 : names_same EE_A BRest
H10 : forall X L, lookup B X L -> lookup Scope' X L
H11 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H12 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H13 : names_same ARest BRest
============================
 OA = OB
 < case NSB' (keep).

Subgoal 5.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O2 S2 S1 O3 O4 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O3 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 (A1::ARest1) O3
EvB1 : evalStmt FE (A1::ARest1) S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv (Scope'::BRest) (A::ARest) (A1::ARest1)
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H6 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same (A1::ARest1) (Scope'::BRest)
H7 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H9 : names_same EE_A BRest
H10 : forall X L, lookup B X L -> lookup Scope' X L
H11 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H12 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H13 : names_same ARest BRest
H14 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) Scope'
H15 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A1
H16 : names_same ARest1 BRest
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA2 EvB1.

Subgoal 5.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S2 S1 O3 O4 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OA @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O3 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 (A1::ARest1) O3
EvB1 : evalStmt FE (A1::ARest1) S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv (Scope'::BRest) (A::ARest) (A1::ARest1)
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H6 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same (A1::ARest1) (Scope'::BRest)
H7 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H9 : names_same EE_A BRest
H10 : forall X L, lookup B X L -> lookup Scope' X L
H11 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H12 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H13 : names_same ARest BRest
H14 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) Scope'
H15 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A1
H16 : names_same ARest1 BRest
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.1.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB S2 S1 O3 O4 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (seq S1 S2) EE_A' OB @
EvA1 : evalStmt FE (ScopeA::EE_A) S1 (A::ARest) O3 *
EvA2 : evalStmt FE (A::ARest) S2 EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_stmt S1
H2 : is_stmt S2
Sec : secure SF (B::BRest) PC S1 (Scope'::BRest)
Sec1 : secure SF (Scope'::BRest) PC S2 SG'
EvB : evalStmt FE (ScopeB::EE_B) S1 (A1::ARest1) O3
EvB1 : evalStmt FE (A1::ARest1) S2 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : public_equiv (Scope'::BRest) (A::ARest) (A1::ARest1)
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H6 : is_list (is_list (is_pair is_string is_slev)) (Scope'::BRest)
NSA' : names_same (A::ARest) (Scope'::BRest)
NSB' : names_same (A1::ARest1) (Scope'::BRest)
H7 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H8 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H9 : names_same EE_A BRest
H10 : forall X L, lookup B X L -> lookup Scope' X L
H11 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) Scope'
H12 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A
H13 : names_same ARest BRest
H14 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) Scope'
H15 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) A1
H16 : names_same ARest1 BRest
============================
 OB = OB
 < search.

Subgoal 5.1.3:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (declare Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (declare Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (declare Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
============================
 OA = OB
 < case IsS.

Subgoal 5.1.3:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (declare Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (declare Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.3:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty SG1 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (declare Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.3:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.3:

Variables: SF FE ScopeA EE_A ScopeB EE_B OB EE1 Scope V X E Ty SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (declare Ty X E) (((X, V)::Scope)::EE1) OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OB *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
============================
 OB = OB
 < search.

Subgoal 5.1.4:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (assign X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (assign X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (assign X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
============================
 OA = OB
 < case IsS.

Subgoal 5.1.4:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (assign X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (assign X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (assign X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X L V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.4.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB V EE1 E X L V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OB *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes X SG' private
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
============================
 OB = OB
 < search.

Subgoal 5.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (assign X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.4.2:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB V EE1 E X V1 EE2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (assign X E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OB *
EvA2 : replaceScopes X V EE1 EE_A'
H1 : is_string X
H2 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes X SG' public
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : replaceScopes X V1 EE2 EE_B'
============================
 OB = OB
 < search.

Subgoal 5.1.5:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (recUpdate Rec Fields E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (recUpdate Rec Fields E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
============================
 OA = OB
 < case IsS.

Subgoal 5.1.5:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (recUpdate Rec Fields E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (recUpdate Rec Fields E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (recUpdate Rec Fields E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec L V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.5.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec L V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OB *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' PC E L
Sec1 : lookupScopes Rec SG' private
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
============================
 OB = OB
 < search.

Subgoal 5.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (recUpdate Rec Fields E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OA *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.5.2:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB V EE1 FieldVals NewVals E Fields Rec V1 EE2 FieldVals1 NewVals1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (recUpdate Rec Fields E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E V EE1 OB *
EvA2 : lookupScopes Rec (ScopeA::EE_A) (recVal FieldVals)
EvA3 : updateRecFields Fields V FieldVals NewVals
EvA4 : replaceScopes Rec (recVal NewVals) EE1 EE_A'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Sec : level SF SG' public E public
Sec1 : lookupScopes Rec SG' public
EvB : evalExpr FE (ScopeB::EE_B) E V1 EE2 OB
EvB1 : lookupScopes Rec (ScopeB::EE_B) (recVal FieldVals1)
EvB2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvB3 : replaceScopes Rec (recVal NewVals1) EE2 EE_B'
============================
 OB = OB
 < search.

Subgoal 5.1.6:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.6:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.6:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
============================
 OA = OB
 < NSA': apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
============================
 OA = OB
 < NSB': apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
============================
 OA = OB
 < apply names_same_add_scope to NSA'.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply names_same_add_scope to NSB'.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
============================
 OA = OB
 < PE': apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
============================
 OA = OB
 < apply public_equiv_add_scope to PE'.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
============================
 OA = OB
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
============================
 OA = OB
 < apply join_is to _ _ Sec1.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
H10 : is_slev Sl1
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA2 EvB1.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
H10 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.1.6.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
H10 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
============================
 OA = OB
 < apply join_is to _ _ Sec1.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
============================
 OA = OB
 < assert Sl1 = public -> false.

Subgoal 5.1.6.2.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.1.6.2.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.1.6.2.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev public
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 5.1.6.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev public
H5 : is_slev public
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < NSA': apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
============================
 OA = OB
 < apply names_same_add_scope to NSA'.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvA2 Sec2 _.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') [] *
EvA3 : O3 ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply append_nil_right to EvA3.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < NSB': apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
============================
 OA = OB
 < apply names_same_add_scope to NSB'.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
H10 : names_same ([]::EE2) ([]::SG')
============================
 OA = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvB1 Sec3 _.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') []
EvB2 : OA ++ [] = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
H10 : names_same ([]::EE2) ([]::SG')
============================
 OA = OB
 < apply append_nil_right to EvB2.

Subgoal 5.1.6.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 OB *
EvA2 : evalStmt FE ([]::EE1) Th (Scope::EE_A') [] *
EvA3 : OB ++ [] = OB
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 OB
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') []
EvB2 : OB ++ [] = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
H10 : names_same ([]::EE2) ([]::SG')
============================
 OB = OB
 < search.

Subgoal 5.1.7:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (ifThenElse Cond Th El)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.7:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (ifThenElse Cond Th El) SG'
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.7:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (ifThenElse Cond Th El) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
============================
 OA = OB
 < apply join_is to _ _ Sec1.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
============================
 OA = OB
 < assert Sl1 = public -> false.

Subgoal 5.1.7.1.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.1.7.1.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.1.7.1.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev public
============================
 false
 < apply join_public to _ _ Sec1.

Subgoal 5.1.7.1.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' public Cond public
Sec1 : join public public public
Sec2 : secure SF ([]::SG') public Th SGT
Sec3 : secure SF ([]::SG') public El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev public
H5 : is_slev public
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < NSA': apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
============================
 OA = OB
 < apply names_same_add_scope to NSA'.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvA2 Sec3 _.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') [] *
EvA3 : O3 ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply append_nil_right to EvA3.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < NSB': apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
============================
 OA = OB
 < apply names_same_add_scope to NSB'.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') O4
EvB2 : OA ++ O4 = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
H10 : names_same ([]::EE2) ([]::SG')
============================
 OA = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvB1 Sec2 _.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 OA *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') [] *
EvA3 : OA ++ [] = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 OA
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') []
EvB2 : OA ++ [] = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
H10 : names_same ([]::EE2) ([]::SG')
============================
 OA = OB
 < apply append_nil_right to EvB2.

Subgoal 5.1.7.1:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 OB *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') [] *
EvA3 : OB ++ [] = OB
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE2 OB
EvB1 : evalStmt FE ([]::EE2) Th (Scope1::EE_B') []
EvB2 : OB ++ [] = OB
H4 : is_slev L
H5 : is_slev Sl1
H6 : Sl1 = public -> false
H7 : is_list (is_list (is_pair is_string is_value)) EE1
NSA' : names_same EE1 SG'
H8 : names_same ([]::EE1) ([]::SG')
H9 : is_list (is_list (is_pair is_string is_value)) EE2
NSB' : names_same EE2 SG'
H10 : names_same ([]::EE2) ([]::SG')
============================
 OB = OB
 < search.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
============================
 OA = OB
 < NSA': apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
============================
 OA = OB
 < NSB': apply level_eval_names_same to _ _ _ _ _ _ EvB Sec.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
============================
 OA = OB
 < apply names_same_add_scope to NSA'.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply names_same_add_scope to NSB'.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
============================
 OA = OB
 < PE': apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
============================
 OA = OB
 < apply public_equiv_add_scope to PE'.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
============================
 OA = OB
 < apply level_is to _ _ _ Sec.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
============================
 OA = OB
 < apply join_is to _ _ Sec1.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O2 El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
H10 : is_slev Sl1
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec3 EvA2 EvB1.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
H10 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.1.7.2:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB EE1 Scope El Th Cond L Sl1 SGT SGF EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (ifThenElse Cond Th El) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE1 O3 *
EvA2 : evalStmt FE ([]::EE1) El (Scope::EE_A') O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Sec : level SF SG' PC Cond L
Sec1 : join L PC Sl1
Sec2 : secure SF ([]::SG') Sl1 Th SGT
Sec3 : secure SF ([]::SG') Sl1 El SGF
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE2 O3
EvB1 : evalStmt FE ([]::EE2) El (Scope1::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
NSA' : names_same EE1 SG'
NSB' : names_same EE2 SG'
H6 : names_same ([]::EE1) ([]::SG')
H7 : names_same ([]::EE2) ([]::SG')
PE' : public_equiv SG' EE1 EE2
H8 : public_equiv ([]::SG') ([]::EE1) ([]::EE2)
H9 : is_slev L
H10 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.1.8:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.8:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
============================
 OA = OB
 < Sec: case Sec (keep).

Subgoal 5.1.8.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 OA = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvA Sec _.

Subgoal 5.1.8.1:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' [] @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = []
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 [] = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvB Sec _.

Subgoal 5.1.8.1:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' EE1 O1 Scope EE2 O2 O3 O12 Body Cond L Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' [] @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' []
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = []
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope1::SG2)
============================
 [] = []
 < search.

Subgoal 5.1.8.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 OA = OB
 < NSA': apply level_eval_names_same to _ _ _ _ _ _ EvA1 Sec1.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
============================
 OA = OB
 < NSB': apply level_eval_names_same to _ _ _ _ _ _ EvB Sec1.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
============================
 OA = OB
 < apply names_same_add_scope to NSA'.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
============================
 OA = OB
 < apply names_same_add_scope to NSB'.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
============================
 OA = OB
 < PE': apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
============================
 OA = OB
 < apply public_equiv_add_scope to PE'.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA2 EvB1.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
============================
 OA = OB
 < IsEE2+: apply evalStmt_isCtx to _ _ _ EvA2.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
IsEE2+ : is_list (is_list (is_pair is_string is_value)) (Scope::EE2)
============================
 OA = OB
 < case IsEE2+.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < IsEE4+: apply evalStmt_isCtx to _ _ _ EvB1.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE4)
============================
 OA = OB
 < case IsEE4+.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 OA = OB
 < NSA'': apply secure_eval_names_same to _ _ _ _ _ _ EvA2 Sec2.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA'' : names_same (Scope::EE2) (Scope1::SG2)
============================
 OA = OB
 < NSB'': apply secure_eval_names_same to _ _ _ _ _ _ EvB1 Sec2.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA'' : names_same (Scope::EE2) (Scope1::SG2)
NSB'' : names_same (Scope2::EE4) (Scope1::SG2)
============================
 OA = OB
 < PE'': apply stmt_secure to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA2 EvB1.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA'' : names_same (Scope::EE2) (Scope1::SG2)
NSB'' : names_same (Scope2::EE4) (Scope1::SG2)
PE'' : public_equiv (Scope1::SG2) (Scope::EE2) (Scope2::EE4)
============================
 OA = OB
 < NSA-: case NSA''.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSB'' : names_same (Scope2::EE4) (Scope1::SG2)
PE'' : public_equiv (Scope1::SG2) (Scope::EE2) (Scope2::EE4)
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope1
NSA-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope
NSA-2 : names_same EE2 SG2
============================
 OA = OB
 < NSB-: case NSB''.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
PE'' : public_equiv (Scope1::SG2) (Scope::EE2) (Scope2::EE4)
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope1
NSA-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope
NSA-2 : names_same EE2 SG2
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope1
NSB-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same EE4 SG2
============================
 OA = OB
 < PE-: case PE''.

Subgoal 5.1.8.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 SG'
NSB' : names_same EE3 SG'
H5 : names_same ([]::EE1) ([]::SG')
H6 : names_same ([]::EE3) ([]::SG')
PE' : public_equiv SG' EE1 EE3
H7 : public_equiv ([]::SG') ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope1
NSA-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope
NSA-2 : names_same EE2 SG2
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope1
NSB-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same EE4 SG2
PE- : forall X V,
        lookup Scope1 X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope1 X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv SG2 EE2 EE4
============================
 OA = OB
 < case NSA.

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7 BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope1
NSA-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope
NSA-2 : names_same EE2 SG2
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope1
NSB-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same EE4 SG2
PE- : forall X V,
        lookup Scope1 X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope1 X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv SG2 EE2 EE4
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
============================
 OA = OB
 < case NSB.

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond Scope1 SG2 EE3 O4 Scope2 EE4 O5 O6 O7 BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope1
NSA-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope
NSA-2 : names_same EE2 SG2
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope1
NSB-1 : forall X IB, mem (X, IB) Scope1 -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same EE4 SG2
PE- : forall X V,
        lookup Scope1 X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope1 X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv SG2 EE2 EE4
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
H15 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H16 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H17 : names_same EE_B BRest
============================
 OA = OB
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope EE2 O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O5 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) EE2
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA-2 : names_same EE2 (B::BRest)
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same EE4 (B::BRest)
PE- : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv (B::BRest) EE2 EE4
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
H15 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H16 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H17 : names_same EE_B BRest
H18 : forall X L, lookup [] X L -> lookup Scope' X L
============================
 OA = OB
 < case NSA-2 (keep).

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O3 O12 Body Cond EE3 O4 Scope2 EE4 O5 O6 O7 BRest B Scope' ARest A
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A::ARest)) O5 *
EvA3 : evalStmt FE (A::ARest) (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::EE4) O5
EvB2 : evalStmt FE EE4 (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) EE4
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA-2 : names_same (A::ARest) (B::BRest)
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same EE4 (B::BRest)
PE- : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv (B::BRest) (A::ARest) EE4
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
H15 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H16 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H17 : names_same EE_B BRest
H18 : forall X L, lookup [] X L -> lookup Scope' X L
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
============================
 OA = OB
 < case NSB-2 (keep).

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O3 O12 Body Cond EE3 O4 Scope2 O5 O6 O7 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A::ARest)) O5 *
EvA3 : evalStmt FE (A::ARest) (while Cond Body) EE_A' O3 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A1::ARest1)) O5
EvB2 : evalStmt FE (A1::ARest1) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA-2 : names_same (A::ARest) (B::BRest)
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same (A1::ARest1) (B::BRest)
PE- : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv (B::BRest) (A::ARest) (A1::ARest1)
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
H15 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H16 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H17 : names_same EE_B BRest
H18 : forall X L, lookup [] X L -> lookup Scope' X L
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec EvA3 EvB2.

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope O12 Body Cond EE3 O4 Scope2 O5 O6 O7 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A::ARest)) O5 *
EvA3 : evalStmt FE (A::ARest) (while Cond Body) EE_A' O6 *
EvA4 : O4 ++ O5 = O12
EvA5 : O12 ++ O6 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A1::ARest1)) O5
EvB2 : evalStmt FE (A1::ARest1) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA-2 : names_same (A::ARest) (B::BRest)
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same (A1::ARest1) (B::BRest)
PE- : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv (B::BRest) (A::ARest) (A1::ARest1)
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
H15 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H16 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H17 : names_same EE_B BRest
H18 : forall X L, lookup [] X L -> lookup Scope' X L
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 Scope Body Cond EE3 O4 Scope2 O5 O6 O7 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A::ARest)) O5 *
EvA3 : evalStmt FE (A::ARest) (while Cond Body) EE_A' O6 *
EvA4 : O4 ++ O5 = O7
EvA5 : O7 ++ O6 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A1::ARest1)) O5
EvB2 : evalStmt FE (A1::ARest1) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA-2 : names_same (A::ARest) (B::BRest)
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same (A1::ARest1) (B::BRest)
PE- : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv (B::BRest) (A::ARest) (A1::ARest1)
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
H15 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H16 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H17 : names_same EE_B BRest
H18 : forall X L, lookup [] X L -> lookup Scope' X L
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
============================
 OA = OB
 < apply append_unique to EvA5 EvB4.

Subgoal 5.1.8.2.1:

Variables: SF FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB EE1 Scope Body Cond EE3 O4 Scope2 O5 O6 O7 BRest B Scope' ARest A ARest1 A1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF (B::BRest) public (while Cond Body) (B::BRest)
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O4 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::(A::ARest)) O5 *
EvA3 : evalStmt FE (A::ARest) (while Cond Body) EE_A' O6 *
EvA4 : O4 ++ O5 = O7
EvA5 : O7 ++ O6 = OB
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF (B::BRest) public Cond public
Sec2 : secure SF ([]::(B::BRest)) public Body (Scope'::(B::BRest))
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE3 O4
EvB1 : evalStmt FE ([]::EE3) Body (Scope2::(A1::ARest1)) O5
EvB2 : evalStmt FE (A1::ARest1) (while Cond Body) EE_B' O6
EvB3 : O4 ++ O5 = O7
EvB4 : O7 ++ O6 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
NSA' : names_same EE1 (B::BRest)
NSB' : names_same EE3 (B::BRest)
H5 : names_same ([]::EE1) ([]::(B::BRest))
H6 : names_same ([]::EE3) ([]::(B::BRest))
PE' : public_equiv (B::BRest) EE1 EE3
H7 : public_equiv ([]::(B::BRest)) ([]::EE1) ([]::EE3)
H8 : is_list (is_pair is_string is_value) Scope
H9 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H10 : is_list (is_pair is_string is_value) Scope2
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
NSA- : forall X IA, mem (X, IA) Scope -> exists IB, mem (X, IB) Scope'
NSA-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope
NSA-2 : names_same (A::ARest) (B::BRest)
NSB- : forall X IA, mem (X, IA) Scope2 -> exists IB, mem (X, IB) Scope'
NSB-1 : forall X IB, mem (X, IB) Scope' -> exists IA, mem (X, IA) Scope2
NSB-2 : names_same (A1::ARest1) (B::BRest)
PE- : forall X V,
        lookup Scope' X public -> lookup Scope X V -> lookup Scope2 X V
PE-1 : forall X V,
         lookup Scope' X public -> lookup Scope2 X V -> lookup Scope X V
PE-2 : public_equiv (B::BRest) (A::ARest) (A1::ARest1)
H12 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H13 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H14 : names_same EE_A BRest
H15 : forall X IA, mem (X, IA) ScopeB -> exists IB, mem (X, IB) B
H16 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeB
H17 : names_same EE_B BRest
H18 : forall X L, lookup [] X L -> lookup Scope' X L
H19 : forall X IA, mem (X, IA) A -> exists IB, mem (X, IB) B
H20 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A
H21 : names_same ARest BRest
H22 : forall X IA, mem (X, IA) A1 -> exists IB, mem (X, IB) B
H23 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) A1
H24 : names_same ARest1 BRest
============================
 OB = OB
 < search.

Subgoal 5.1.8.2.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB EE1 O1 Scope EE2 O2 O3 O12 Body Cond Scope1 SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond trueVal EE1 O1 *
EvA2 : evalStmt FE ([]::EE1) Body (Scope::EE2) O2 *
EvA3 : evalStmt FE EE2 (while Cond Body) EE_A' O3 *
EvA4 : O1 ++ O2 = O12
EvA5 : O12 ++ O3 = OA
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope1::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 5.1.9:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (while Cond Body)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
============================
 OA = OB
 < case IsS.

Subgoal 5.1.9:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 OA = OB
 < Sec: case Sec (keep).

Subgoal 5.1.9.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond L Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
============================
 OA = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvA Sec _.

Subgoal 5.1.9.1:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Body Cond L Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' [] @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' [] *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
============================
 [] = OB
 < apply stmt_not_public_no_output to _ _ _ _ _ _ _ _ EvB Sec _.

Subgoal 5.1.9.1:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' Body Cond L Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' private (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' [] @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' []
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' [] *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' private Cond L
Sec2 : secure SF ([]::SG') private Body (Scope::SG2)
============================
 [] = []
 < search.

Subgoal 5.1.9.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (while Cond Body) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.9.2.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2 EE1 O1 Scope1 EE2 O2 O3 O12
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond trueVal EE1 O1
EvB1 : evalStmt FE ([]::EE1) Body (Scope1::EE2) O2
EvB2 : evalStmt FE EE2 (while Cond Body) EE_B' O3
EvB3 : O1 ++ O2 = O12
EvB4 : O12 ++ O3 = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 5.1.9.2.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Body Cond Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OA *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec1 EvA1 EvB.

Subgoal 5.1.9.2.2:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Body Cond Scope SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG' public (while Cond Body) SG'
EvA : evalStmt FE (ScopeA::EE_A) (while Cond Body) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) Cond falseVal EE_A' OB *
H1 : is_expr Cond
H2 : is_stmt Body
Sec1 : level SF SG' public Cond public
Sec2 : secure SF ([]::SG') public Body (Scope::SG2)
EvB : evalExpr FE (ScopeB::EE_B) Cond falseVal EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.1.10:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (scopeStmt S1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (scopeStmt S1) SG'
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (scopeStmt S1) EE_B' OB
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
============================
 OA = OB
 < case IsS.

Subgoal 5.1.10:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (scopeStmt S1) SG'
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (scopeStmt S1) EE_B' OB
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (scopeStmt S1) EE_B' OB
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
============================
 OA = OB
 < apply names_same_add_scope to NSA.

Subgoal 5.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
============================
 OA = OB
 < apply names_same_add_scope to NSB.

Subgoal 5.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
H3 : names_same ([]::(ScopeB::EE_B)) ([]::SG')
============================
 OA = OB
 < apply public_equiv_add_scope to PE.

Subgoal 5.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OA @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OA *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
H3 : names_same ([]::(ScopeB::EE_B)) ([]::SG')
H4 : public_equiv ([]::SG') ([]::(ScopeA::EE_A)) ([]::(ScopeB::EE_B))
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.10:

Variables: SF PC SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Scope S1 Scope1 Scope2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (scopeStmt S1) EE_A' OB @
EvA1 : evalStmt FE ([]::(ScopeA::EE_A)) S1 (Scope::EE_A') OB *
H1 : is_stmt S1
Sec : secure SF ([]::SG') PC S1 (Scope1::SG')
EvB : evalStmt FE ([]::(ScopeB::EE_B)) S1 (Scope2::EE_B') OB
H2 : names_same ([]::(ScopeA::EE_A)) ([]::SG')
H3 : names_same ([]::(ScopeB::EE_B)) ([]::SG')
H4 : public_equiv ([]::SG') ([]::(ScopeA::EE_A)) ([]::(ScopeB::EE_B))
============================
 OB = OB
 < search.

Subgoal 5.1.11:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.11:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.11:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.11.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E I1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I1) EE_B' O2
EvB1 : O2 ++ [intVal I1] = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.11.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I E I1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O2 *
EvA2 : O2 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I1) EE_B' O2
EvB1 : O2 ++ [intVal I1] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.11.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB E I1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I1) EE_A' O2 *
EvA2 : O2 ++ [intVal I1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I1) EE_B' O2
EvB1 : O2 ++ [intVal I1] = OB
============================
 OA = OB
 < apply append_unique to EvA2 EvB1.

Subgoal 5.1.11.1:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB E I1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I1) EE_A' O2 *
EvA2 : O2 ++ [intVal I1] = OB
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I1) EE_B' O2
EvB1 : O2 ++ [intVal I1] = OB
============================
 OB = OB
 < search.

Subgoal 5.1.11.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.11.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.11.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB I O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (intVal I) EE_A' O1 *
EvA2 : O1 ++ [intVal I] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.12:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.12:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.12:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.12.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.12.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.12.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O2 *
EvA2 : O2 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.12.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O2 *
EvA2 : O2 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 OA = OB
 < apply append_unique to EvA2 EvB1.

Subgoal 5.1.12.2:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O2 *
EvA2 : O2 ++ [trueVal] = OB
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 OB = OB
 < search.

Subgoal 5.1.12.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.12.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E trueVal EE_A' O1 *
EvA2 : O1 ++ [trueVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.13:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.13:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.13:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.13.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.13.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.13.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.13.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O2 *
EvA2 : O2 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.13.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O2 *
EvA2 : O2 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 OA = OB
 < apply append_unique to EvA2 EvB1.

Subgoal 5.1.13.3:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O2 *
EvA2 : O2 ++ [falseVal] = OB
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 OB = OB
 < search.

Subgoal 5.1.13.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB O1 E S1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E falseVal EE_A' O1 *
EvA2 : O1 ++ [falseVal] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S1) EE_B' O2
EvB1 : O2 ++ [stringVal S1] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.14:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (printVal E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
============================
 OA = OB
 < case IsS.

Subgoal 5.1.14:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (printVal E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.14:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) (printVal E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.14.1:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E I O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (intVal I) EE_B' O2
EvB1 : O2 ++ [intVal I] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.14.2:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E trueVal EE_B' O2
EvB1 : O2 ++ [trueVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.14.3:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E falseVal EE_B' O2
EvB1 : O2 ++ [falseVal] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.14.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 O1 E S2 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O1 *
EvA2 : O1 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S2) EE_B' O2
EvB1 : O2 ++ [stringVal S2] = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.14.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB S1 E S2 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S1) EE_A' O2 *
EvA2 : O2 ++ [stringVal S1] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S2) EE_B' O2
EvB1 : O2 ++ [stringVal S2] = OB
============================
 OA = OB
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.14.4:

Variables: SF SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB E S2 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S2) EE_A' O2 *
EvA2 : O2 ++ [stringVal S2] = OA
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S2) EE_B' O2
EvB1 : O2 ++ [stringVal S2] = OB
============================
 OA = OB
 < apply append_unique to EvA2 EvB1.

Subgoal 5.1.14.4:

Variables: SF SG' FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB E S2 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG'
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG'
NSB : names_same (ScopeB::EE_B) SG'
PE : public_equiv SG' (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (printVal E) EE_A' OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E (stringVal S2) EE_A' O2 *
EvA2 : O2 ++ [stringVal S2] = OB
H1 : is_expr E
Sec : level SF SG' public E public
EvB : evalExpr FE (ScopeB::EE_B) E (stringVal S2) EE_B' O2
EvB1 : O2 ++ [stringVal S2] = OB
============================
 OB = OB
 < search.

Subgoal 5.1.15:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt (secdecl L Ty X E)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (secdecl L Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
============================
 OA = OB
 < case IsS.

Subgoal 5.1.15:

Variables: SF SG PC SG' FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty L
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC (secdecl L Ty X E) SG'
EvA : evalStmt FE (ScopeA::EE_A) (secdecl L Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (secdecl L Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev L
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.15.1:

Variables: SF PC FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty L1 SG1 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl private Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (secdecl private Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope1::SG1) PC E L1
Sec1 : no_lookup Scope1 X
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.15.1:

Variables: SF PC FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty L1 SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl private Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope1::SG1) PC E L1
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.15.1:

Variables: SF PC FE ScopeA EE_A ScopeB EE_B OB EE1 Scope V X E Ty L1 SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl private Ty X E) (((X, V)::Scope)::EE1) OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OB *
H1 : is_slev private
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope1::SG1) PC E L1
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
============================
 OB = OB
 < search.

Subgoal 5.1.15.2:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B EE_B' OB EE1 Scope V X E Ty SG1 Scope1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl public Ty X E) (((X, V)::Scope)::EE1) OA @
EvB : evalStmt FE (ScopeB::EE_B) (secdecl public Ty X E) EE_B' OB
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.1.15.2:

Variables: SF FE ScopeA EE_A OA ScopeB EE_B OB EE1 Scope V X E Ty SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl public Ty X E) (((X, V)::Scope)::EE1) OA @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OA *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Sec EvA1 EvB.

Subgoal 5.1.15.2:

Variables: SF FE ScopeA EE_A ScopeB EE_B OB EE1 Scope V X E Ty SG1 Scope1 EE2 Scope2 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (Scope1::SG1)
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (Scope1::SG1)
NSB : names_same (ScopeB::EE_B) (Scope1::SG1)
PE : public_equiv (Scope1::SG1) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) (secdecl public Ty X E) (((X, V)::Scope)::EE1) OB @
EvA1 : evalExpr FE (ScopeA::EE_A) E V (Scope::EE1) OB *
H1 : is_slev public
H2 : is_typ Ty
H3 : is_string X
H4 : is_expr E
Sec : level SF (Scope1::SG1) public E public
Sec1 : no_lookup Scope1 X
EvB : evalExpr FE (ScopeB::EE_B) E V1 (Scope2::EE2) OB
============================
 OB = OB
 < search.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
Sec : secure SF SG PC <unknown K evalStmt> SG'
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
============================
 OA = OB
 < Sec: case Sec.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
============================
 OA = OB
 < apply names_is to _ EvA1.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
============================
 OA = OB
 < apply names_is_sec to _ Sec.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 OA = OB
 < apply proj_stmt_unique to Sec1 EvA2 _ _ _ _ _.

Subgoal 5.1.16.1:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.1.16.1:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NSA EvA1 Sec M.

Subgoal 5.1.16.1:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.1.16.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.1.16.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NSA EvA1 Sec M.

Subgoal 5.1.16.2:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 S_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P1
Sec2 : secure SF SG PC S_P1 SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 OA = OB
 < apply proj_stmt_is to Sec1 _ _.

Subgoal 5.1.16:

Variables: SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) SG
NSB : names_same (ScopeB::EE_B) SG
PE : public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names SG Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF SG PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
============================
 OA = OB
 < case NSA (keep).

Subgoal 5.1.16:

Variables: SF PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P SG'
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
============================
 OA = OB
 < apply secure_older_scopes to _ _ _ Sec2.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
============================
 OA = OB
 < NSB-: apply names_same_symmetric to NSB.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
============================
 OA = OB
 < NSAB: apply names_same_transitive to NSA NSB-.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
============================
 OA = OB
 < NamesB: apply names_exists to IsEE_B.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
============================
 OA = OB
 < apply names_is to _ EvA1.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
============================
 OA = OB
 < apply names_is to _ NamesB.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
============================
 OA = OB
 < PrB: apply proj_stmt_other to EvA2 _ _ _ with
          L' = N.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 OA = OB
 < apply proj_stmt_unique to EvA2 PrB _ _ _ _ _.

Subgoal 5.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 forall X, mem X N -> mem X Names
 < intros M.

Subgoal 5.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X N
============================
 mem X Names
 < NSBA: apply names_same_symmetric to NSAB.

Subgoal 5.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X N
NSBA : names_same (ScopeB::EE_B) (ScopeA::EE_A)
============================
 mem X Names
 < apply names_same_names to NSBA NamesB EvA1 M.

Subgoal 5.1.16.3:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X N
NSBA : names_same (ScopeB::EE_B) (ScopeA::EE_A)
H10 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.1.16.4:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 forall X, mem X Names -> mem X N
 < intros M.

Subgoal 5.1.16.4:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X Names
============================
 mem X N
 < apply names_same_names to NSAB EvA1 NamesB M.

Subgoal 5.1.16.4:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names S_P EE_P O_P Names1 BRest B Scope' N S'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S_P
EvA3 : evalStmt FE (ScopeA::EE_A) S_P EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Sec2 : secure SF (B::BRest) PC S_P (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S_P
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
M : mem X Names
H10 : mem X N
============================
 mem X N
 < search.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
============================
 OA = OB
 < EvB': apply proj_evalStmt_forward to PrB NamesB _ _ _ EvB.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
============================
 OA = OB
 < EvA': apply proj_evalStmt_forward to EvA2 EvA1 _ _ _ EvA.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE'' EE''1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OA @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE''1 OA
EvA'1 : scopes_same EE_A' EE''1
============================
 OA = OB
 < apply evalStmt_unique to _ _ _ EvA' EvA3.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' O_P @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
============================
 O_P = OB
 < apply proj_stmt_is to PrB _ _.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P O_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' O_P @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H10 : is_stmt S''
============================
 O_P = OB
 < PE_Pr: apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Sec2 EvA3 EvB'.

Subgoal 5.1.16:

Variables: SF PC FE ScopeA EE_A EE_A' ScopeB EE_B EE_B' OB Names EE_P Names1 BRest B Scope' N S'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsS : is_stmt <unknown K evalStmt>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) (B::BRest)
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A)
IsEE_B : is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B)
SFC : secFunCtxs SF FE
NSA : names_same (ScopeA::EE_A) (B::BRest)
NSB : names_same (ScopeB::EE_B) (B::BRest)
PE : public_equiv (B::BRest) (ScopeA::EE_A) (ScopeB::EE_B)
EvA : evalStmt FE (ScopeA::EE_A) <unknown K evalStmt> EE_A' OB @
EvB : evalStmt FE (ScopeB::EE_B) <unknown K evalStmt> EE_B' OB
EvA1 : names (ScopeA::EE_A) Names
EvA2 : Names |{stmt}- <unknown K evalStmt> ~~> S''
EvA3 : evalStmt FE (ScopeA::EE_A) S'' EE_P OB *
Sec : names (B::BRest) Names1
Sec1 : Names1 |{stmt}- <unknown K evalStmt> ~~> S''
Sec2 : secure SF (B::BRest) PC S'' (Scope'::BRest)
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_stmt S''
H4 : forall X IA, mem (X, IA) ScopeA -> exists IB, mem (X, IB) B
H5 : forall X IB, mem (X, IB) B -> exists IA, mem (X, IA) ScopeA
H6 : names_same EE_A BRest
H7 : forall X L, lookup B X L -> lookup Scope' X L
NSB- : names_same (B::BRest) (ScopeB::EE_B)
NSAB : names_same (ScopeA::EE_A) (ScopeB::EE_B)
NamesB : names (ScopeB::EE_B) N
H8 : is_list is_string Names
H9 : is_list is_string N
PrB : N |{stmt}- <unknown K evalStmt> ~~> S''
EvB' : evalStmt FE (ScopeB::EE_B) S'' EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalStmt FE (ScopeA::EE_A) S'' EE_P OB
EvA'1 : scopes_same EE_A' EE_P
H10 : is_stmt S''
============================
 OB = OB
 < search.

Subgoal 5.2.1:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB I
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (num I) L
EvA : evalExpr FE EE_A' (num I) (intVal I) EE_A' [] @
EvB : evalExpr FE EE_B (num I) VB EE_B' OB
============================
 [] = OB
 < case EvB.

Subgoal 5.2.1:

Variables: SF SG PC L FE EE_A' EE_B' I
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (num I)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (num I) L
EvA : evalExpr FE EE_A' (num I) (intVal I) EE_A' [] @
============================
 [] = []
 < search.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (plus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (plus E1 E2) L
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (plus E1 E2) L
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (plus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (plus E1 E2) (intVal I) EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 + I2 = I
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 + I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (minus E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (minus E1 E2) L
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (minus E1 E2) L
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (minus E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (minus E1 E2) (intVal I) EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 - I2 = I
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 - I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (mult E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (mult E1 E2) L
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (mult E1 E2) L
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (mult E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.4:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (mult E1 E2) (intVal I) EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 * I2 = I
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 * I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (div E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (div E1 E2) L
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (div E1 E2) L
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvB : evalExpr FE EE_B (div E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.5:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 I E2 E1 L2 L3 I4 EE2 O3 I5 O4 I3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (div E1 E2) (intVal I) EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 / I2 = I
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I5) EE_B' O4
EvB2 : I4 / I5 = I3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.6:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC true L
EvA : evalExpr FE EE_A' true trueVal EE_A' [] @
EvB : evalExpr FE EE_B true VB EE_B' OB
============================
 [] = OB
 < case EvB.

Subgoal 5.2.6:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr true
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC true L
EvA : evalExpr FE EE_A' true trueVal EE_A' [] @
============================
 [] = []
 < search.

Subgoal 5.2.7:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC false L
EvA : evalExpr FE EE_A' false falseVal EE_A' [] @
EvB : evalExpr FE EE_B false VB EE_B' OB
============================
 [] = OB
 < case EvB.

Subgoal 5.2.7:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr false
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC false L
EvA : evalExpr FE EE_A' false falseVal EE_A' [] @
============================
 [] = []
 < search.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.8:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.8.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OA = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.8.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.8.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.8.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 OA = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.8.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.8.2.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' [] *
EvA3 : OB ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply append_nil_right to EvA3.

Subgoal 5.2.8.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OA *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' [] *
EvA3 : OA ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OA
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OA
 < search.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.8.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
============================
 OA = OB
 < case IsE.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.9:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 O1 = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.9.1.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.9.1.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.9.1.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 O1 = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 O1 = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 O1 = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.9.1.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.9.1.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.9.1.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.9.1.2:

Variables: SF SG L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 O1 = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 O1 = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' []
EvB2 : O1 ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply append_nil_right to EvB2.

Subgoal 5.2.9.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OB *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 OB
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' []
EvB2 : OB ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OB = OB
 < search.

Subgoal 5.2.9.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.9.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OB *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 O1 = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.9.3.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.9.3.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.9.3.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 O1 = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 O1 = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 O1 = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.9.3.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.9.3.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.9.3.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.9.3.2:

Variables: SF SG L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 O1 = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 O1 = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' []
EvB2 : O1 ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply append_nil_right to EvB2.

Subgoal 5.2.9.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OB *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE1 OB
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' []
EvB2 : OB ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OB = OB
 < search.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (and E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (and E1 E2) L
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.10:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (and E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.10.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OA = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.10.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.10.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.10.2.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 OA = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.10.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.10.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.10.2.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.10.2.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' [] *
EvA3 : OB ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply append_nil_right to EvA3.

Subgoal 5.2.10.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 OA *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' [] *
EvA3 : OA ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OA
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OA
 < search.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.10.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (and E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
============================
 OA = OB
 < case IsE.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.11:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.11.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.11.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OB *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 O1 = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.11.2.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.11.2.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.11.2.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 O1 = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 O1 = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 O1 = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.11.2.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.11.2.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.11.2.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.11.2.2:

Variables: SF SG L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 O1 = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 O1 = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' []
EvB2 : O1 ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply append_nil_right to EvB2.

Subgoal 5.2.11.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OB *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 OB
EvB1 : evalExpr FE EE1 E2 trueVal EE_B' []
EvB2 : OB ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OB = OB
 < search.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 O1 = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.11.3.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.11.3.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.11.3.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
============================
 O1 = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 O1 = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 O1 = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.11.3.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.11.3.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.11.3.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.11.3.2:

Variables: SF SG L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 O1 = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 O1 = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1 O2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' O2
EvB2 : O1 ++ O2 = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvB1 Lev2 _.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1 O1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' O1 @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' O1 *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 O1
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' []
EvB2 : O1 ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O1 = OB
 < apply append_nil_right to EvB2.

Subgoal 5.2.11.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E2 E1 L2 Sl1 L3 EE1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OB *
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE1 OB
EvB1 : evalExpr FE EE1 E2 falseVal EE_B' []
EvB2 : OB ++ [] = OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OB = OB
 < search.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.12:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OA = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.12.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.12.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.12.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 OA = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.12.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.12.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.12.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.12.1.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' [] *
EvA3 : OB ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply append_nil_right to EvA3.

Subgoal 5.2.12.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OA *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' [] *
EvA3 : OA ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OA
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OA
 < search.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.12.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.12.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 trueVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (or E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (or E1 E2) L
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.13:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (or E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OA = OB
 < NEq: assert L2 = public -> false.

Subgoal 5.2.13.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 L2 = public -> false
 < intros E.

Subgoal 5.2.13.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
E : L2 = public
============================
 false
 < case E.

Subgoal 5.2.13.1.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 public
Lev1 : join public PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 false
 < apply expr_level to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 OA = OB
 < assert Sl1 = public -> false.

Subgoal 5.2.13.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
============================
 Sl1 = public -> false
 < intros E.

Subgoal 5.2.13.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
E : Sl1 = public
============================
 false
 < case E.

Subgoal 5.2.13.1.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC public
Lev2 : level SF SG public E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev public
============================
 false
 < apply join_public to _ _ Lev1.

Subgoal 5.2.13.1.2:

Variables: SF SG L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG public E1 public
Lev1 : join public public public
Lev2 : level SF SG public E2 L3
Lev3 : join public L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : public = public -> false
H3 : is_slev public
H4 : is_slev public
============================
 false
 < backchain NEq.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : OB ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply expr_not_public_no_output to _ _ _ _ _ _ _ _ EvA2 Lev2 _.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OB *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' [] *
EvA3 : OB ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply append_nil_right to EvA3.

Subgoal 5.2.13.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' EE1 E2 E1 L2 Sl1 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 OA *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' [] *
EvA3 : OA ++ [] = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OA
NEq : L2 = public -> false
H3 : is_slev L2
H4 : is_slev Sl1
H5 : Sl1 = public -> false
H6 : names_same EE1 SG
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OA
 < search.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.13.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 trueVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O1 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply level_is to _ _ _ Lev.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
============================
 OA = OB
 < apply join_is to _ _ Lev1.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA2 EvB1.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.13.3:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 E2 E1 L2 Sl1 L3 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (or E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE1 O3 *
EvA2 : evalExpr FE EE1 E2 falseVal EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : join L2 PC Sl1
Lev2 : level SF SG Sl1 E2 L3
Lev3 : join L2 L3 L
EvB : evalExpr FE EE_B E1 falseVal EE2 O3
EvB1 : evalExpr FE EE2 E2 falseVal EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
H8 : is_slev L2
H9 : is_slev Sl1
============================
 OB = OB
 < search.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
============================
 OA = OB
 < case IsE.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.14:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.14.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.14.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OB *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.2.14.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.14.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 falseVal EE_A' OB *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (not E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
============================
 OA = OB
 < case IsE.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (not E1) L
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.15:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (not E1) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.15.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.15.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OB *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 falseVal EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.2.15.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OA *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.15.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (not E1) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 trueVal EE_A' OB *
H1 : is_expr E1
Lev : level SF SG PC E1 L
EvB : evalExpr FE EE_B E1 trueVal EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.16:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 > I2
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.16.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 > I2
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 > I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 > I2
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.16.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 > I2
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (greater E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (greater E1 E2) L
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.17:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB I1 EE1 O1 I2 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (greater E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.17.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 > I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 O1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 O2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O2 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.17.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB I1 EE1 I2 E2 E1 L2 L3 I3 EE2 O3 I4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (greater E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (intVal I1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (intVal I2) EE_A' O4 *
EvA3 : I1 <= I2
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (intVal I3) EE2 O3
EvB1 : evalExpr FE EE2 E2 (intVal I4) EE_B' O4
EvB2 : I3 <= I4
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.18:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V EE1 O1 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.18.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB V EE1 E2 E1 L2 L3 V1 EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 O2 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V EE1 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA3 EvB3.

Subgoal 5.2.18.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB V EE1 E2 E1 L2 L3 V1 EE2 O3 V2 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) trueVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 V EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V1 EE2 O3
EvB1 : evalExpr FE EE2 E2 V2 EE_B' O4
EvB2 : V1 = V2 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (eq E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (eq E1 E2) L
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.19:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB V1 EE1 O1 V2 O2 E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvB : evalExpr FE EE_B (eq E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O4 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB2.

Subgoal 5.2.19.1:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB V1 EE1 V2 E2 E1 L2 L3 V EE2 O3 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O4 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V EE2 O3
EvB1 : evalExpr FE EE2 E2 V EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 O1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O1 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 O2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O2 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB V1 EE1 V2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OA @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O4 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.19.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB V1 EE1 V2 E2 E1 L2 L3 V3 EE2 O3 V4 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (eq E1 E2) falseVal EE_A' OB @
EvA1 : evalExpr FE EE_A E1 V1 EE1 O3 *
EvA2 : evalExpr FE EE1 E2 V2 EE_A' O4 *
EvA3 : V1 = V2 -> false
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 V3 EE2 O3
EvB1 : evalExpr FE EE2 E2 V4 EE_B' O4
EvB2 : V3 = V4 -> false
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.20:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (stringLit S) L
EvA : evalExpr FE EE_A' (stringLit S) (stringVal S) EE_A' [] @
EvB : evalExpr FE EE_B (stringLit S) VB EE_B' OB
============================
 [] = OB
 < case EvB.

Subgoal 5.2.20:

Variables: SF SG PC L FE EE_A' EE_B' S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (stringLit S)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (stringLit S) L
EvA : evalExpr FE EE_A' (stringLit S) (stringVal S) EE_A' [] @
============================
 [] = []
 < search.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (appString E1 E2)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (appString E1 E2) L
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (appString E1 E2) L
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvB : evalExpr FE EE_B (appString E1 E2) VB EE_B' OB
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 O1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O1 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O1 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 S2 O2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O2 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O2 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB S1 EE1 S2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OA @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O4 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O4 = OA
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA4 EvB3.

Subgoal 5.2.21:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB S1 EE1 S2 S E2 E1 L2 L3 S4 EE2 O3 S5 O4 S3
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (appString E1 E2) (stringVal S) EE_A' OB @
EvA1 : evalExpr FE EE_A E1 (stringVal S1) EE1 O3 *
EvA2 : evalExpr FE EE1 E2 (stringVal S2) EE_A' O4 *
EvA3 : S1 ++ S2 = S
EvA4 : O3 ++ O4 = OB
H1 : is_expr E1
H2 : is_expr E2
Lev : level SF SG PC E1 L2
Lev1 : level SF SG PC E2 L3
Lev2 : join L2 L3 L
EvB : evalExpr FE EE_B E1 (stringVal S4) EE2 O3
EvB1 : evalExpr FE EE2 E2 (stringVal S5) EE_B' O4
EvB2 : S4 ++ S5 = S3
EvB3 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.2.22:

Variables: SF SG PC L FE EE_A' VA EE_B EE_B' VB OB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : level SF SG PC (name X) L
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvB : evalExpr FE EE_B (name X) VB EE_B' OB
EvA1 : lookupScopes X EE_A' VA
============================
 [] = OB
 < case EvB.

Subgoal 5.2.22:

Variables: SF SG PC L FE EE_A' VA EE_B' VB X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (name X)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : level SF SG PC (name X) L
EvA : evalExpr FE EE_A' (name X) VA EE_A' [] @
EvA1 : lookupScopes X EE_A' VA
H1 : lookupScopes X EE_B' VB
============================
 [] = []
 < search.

Subgoal 5.2.23:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (call Fun Args)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) L
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvB : evalExpr FE EE_B (call Fun Args) VB EE_B' OB
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.23:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) L
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvB : evalExpr FE EE_B (call Fun Args) VB EE_B' OB
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.23:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (call Fun Args) L
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 OA = OB
 < apply IH_A to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
============================
 OA = OB
 < apply evalArgs_isValue to _ _ _ EvA2.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
============================
 OA = OB
 < apply evalArgs_isValue to _ _ _ EvB1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
============================
 OA = OB
 < apply lookup_unique to EvB EvA1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
============================
 OA = OB
 < FR: case SFC (keep).

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 OA = OB
 < FS: apply FR to Lev EvA1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
============================
 OA = OB
 < LAV: apply args_level to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
============================
 OA = OB
 < PE': apply zip_level_arg_vals to LAV EvA3 EvB2 FS.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
============================
 OA = OB
 < apply public_equiv_add_other to PE' _ with
     X = RetVar VA = RVVal VB = RVVal L = private.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
============================
 OA = OB
 < IsFP: apply lookup_is_value_funCtx to _ EvA1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsFP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body)))
============================
 OA = OB
 < IsF: case IsFP.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body))
============================
 OA = OB
 < IsF: case IsF1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 OA = OB
 < IsF: case IsF2.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
============================
 OA = OB
 < apply zip_is to _ _ EvA3.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
============================
 OA = OB
 < apply zip_is to _ _ EvB2.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
============================
 OA = OB
 < apply levelArgs_is to _ _ _ Lev1.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : is_list is_slev ArgLevs
============================
 OA = OB
 < apply zip_names_same to _ _ with
     ZA = (RetVar, RVVal)::InitEnv1 ZB = (RetVar, private)::ZP.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : is_list is_slev ArgLevs
H9 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, private)::ZP]
============================
 OA = OB
 < apply zip_names_same to _ _ with
     ZA = (RetVar, RVVal)::InitEnv ZB = (RetVar, private)::ZP.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : is_list is_slev ArgLevs
H9 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, private)::ZP]
H10 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
============================
 OA = OB
 < apply zip_is_sec to _ _ _ with
     Z = (RetVar, private)::ZP.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : is_list is_slev ArgLevs
H9 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, private)::ZP]
H10 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
H11 : is_list (is_pair is_string is_slev) ((RetVar, private)::ZP)
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ FS1 EvA4 EvB3.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
EvA5 : O3 ++ O4 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : is_list is_slev ArgLevs
H9 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, private)::ZP]
H10 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
H11 : is_list (is_pair is_string is_slev) ((RetVar, private)::ZP)
============================
 OA = OB
 < apply append_unique to EvA5 EvB4.

Subgoal 5.2.23.1:

Variables: SF SG FE EE_A EE_A' VA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev private
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OB @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
EvA5 : O3 ++ O4 = OB
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (private, ArgLevs)
Lev1 : levelArgs SF SG private Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, private)::ZP] private Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : public_equiv [(RetVar, private)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H6 : is_list (is_pair is_string is_value) InitEnv
H7 : is_list (is_pair is_string is_value) InitEnv1
H8 : is_list is_slev ArgLevs
H9 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, private)::ZP]
H10 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, private)::ZP]
H11 : is_list (is_pair is_string is_slev) ((RetVar, private)::ZP)
============================
 OB = OB
 < search.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals O1 InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O1 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O1 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
============================
 OA = OB
 < apply IH_A to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
============================
 OA = OB
 < apply evalArgs_isValue to _ _ _ EvA2.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
============================
 OA = OB
 < apply evalArgs_isValue to _ _ _ EvB1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames1 ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar1 EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
============================
 OA = OB
 < apply lookup_unique to EvB EvA1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
============================
 OA = OB
 < FR: case SFC (keep).

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 OA = OB
 < FS: apply FR to Lev EvA1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
============================
 OA = OB
 < LAV: apply args_level to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
============================
 OA = OB
 < PE': apply zip_level_arg_vals to LAV EvA3 EvB2 FS.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
============================
 OA = OB
 < apply lookupSecFun_is to _ Lev.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
============================
 OA = OB
 < assert public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1].

Subgoal 5.2.23.2.1:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
============================
 public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
 < Or: apply is_slev_public_or_not to _ with
         L = L.

Subgoal 5.2.23.2.1:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
Or : L = public \/ (L = public -> false)
============================
 public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
 < case Or.

Subgoal 5.2.23.2.1.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev public
H6 : is_list is_slev ArgLevs
============================
 public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
 < apply public_equiv_add_public to PE' with
     X = RetVar V = RVVal.

Subgoal 5.2.23.2.1.1:

Variables: SF SG FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (public, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, public)::ZP] public Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev public
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
============================
 public_equiv [(RetVar, public)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
 < search.

Subgoal 5.2.23.2.1.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : L = public -> false
============================
 public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
 < apply public_equiv_add_other to PE' _ with
     X = RetVar VA = RVVal VB = RVVal L = L.

Subgoal 5.2.23.2.1.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : L = public -> false
H8 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
============================
 public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
 < search.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
============================
 OA = OB
 < IsFP: apply lookup_is_value_funCtx to _ EvA1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsFP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body)))
============================
 OA = OB
 < IsF: case IsFP.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body))
============================
 OA = OB
 < IsF: case IsF1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 OA = OB
 < IsF: case IsF2.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
============================
 OA = OB
 < apply zip_is to _ _ EvA3.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
============================
 OA = OB
 < apply zip_is to _ _ EvB2.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
H9 : is_list (is_pair is_string is_value) InitEnv1
============================
 OA = OB
 < apply levelArgs_is to _ _ _ Lev1.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
H9 : is_list (is_pair is_string is_value) InitEnv1
H10 : is_list is_slev ArgLevs
============================
 OA = OB
 < apply zip_names_same to _ _ with
     ZA = (RetVar, RVVal)::InitEnv1 ZB = (RetVar, L)::ZP.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
H9 : is_list (is_pair is_string is_value) InitEnv1
H10 : is_list is_slev ArgLevs
H11 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, L)::ZP]
============================
 OA = OB
 < apply zip_names_same to _ _ with
     ZA = (RetVar, RVVal)::InitEnv ZB = (RetVar, L)::ZP.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
H9 : is_list (is_pair is_string is_value) InitEnv1
H10 : is_list is_slev ArgLevs
H11 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, L)::ZP]
H12 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, L)::ZP]
============================
 OA = OB
 < apply zip_is_sec to _ _ _ with
     Z = (RetVar, L)::ZP.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 O2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O2 *
EvA5 : O3 ++ O2 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
H9 : is_list (is_pair is_string is_value) InitEnv1
H10 : is_list is_slev ArgLevs
H11 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, L)::ZP]
H12 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, L)::ZP]
H13 : is_list (is_pair is_string is_slev) ((RetVar, L)::ZP)
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ FS1 EvA4 EvB3.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA OA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OA @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
EvA5 : O3 ++ O4 = OA
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
H9 : is_list (is_pair is_string is_value) InitEnv1
H10 : is_list is_slev ArgLevs
H11 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, L)::ZP]
H12 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, L)::ZP]
H13 : is_list (is_pair is_string is_slev) ((RetVar, L)::ZP)
============================
 OA = OB
 < apply append_unique to EvA5 EvB4.

Subgoal 5.2.23.2:

Variables: SF SG L FE EE_A EE_A' VA EE_B EE_B' VB OB RetVar RVVal ArgNames Body ArgVals InitEnv EE2 Args Fun ArgVals1 O3 InitEnv1 EE1 O4 ArgLevs ZP SG1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev public
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (call Fun Args) VA EE_A' OB @
EvA1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvA2 : evalArgs FE EE_A Args ArgVals EE_A' O3 *
EvA3 : zip ArgNames ArgVals InitEnv
EvA4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE2 O4 *
EvA5 : O3 ++ O4 = OB
EvA6 : lookupScopes RetVar EE2 VA
H1 : is_string Fun
H2 : is_args Args
EvB : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
EvB1 : evalArgs FE EE_B Args ArgVals1 EE_B' O3
EvB2 : zip ArgNames ArgVals1 InitEnv1
EvB3 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE1 O4
EvB4 : O3 ++ O4 = OB
EvB5 : lookupScopes RetVar EE1 VB
Lev : lookup SF Fun (L, ArgLevs)
Lev1 : levelArgs SF SG public Args ArgLevs
H3 : is_list is_value ArgVals
H4 : is_list is_value ArgVals1
FR : forall FName RetLev PSecs RetVar RVVal PNames Body,
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\ secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
FS : zip ArgNames ArgLevs ZP
FS1 : secure SF [(RetVar, L)::ZP] L Body SG1
LAV : level_arg_vals ArgLevs ArgVals ArgVals1
PE' : public_equiv [ZP] [InitEnv] [InitEnv1]
H5 : is_slev L
H6 : is_list is_slev ArgLevs
H7 : public_equiv [(RetVar, L)::ZP] [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv1]
IsF : is_string RetVar
IsF1 : is_value RVVal
IsF2 : is_list is_string ArgNames
IsF3 : is_stmt Body
H8 : is_list (is_pair is_string is_value) InitEnv
H9 : is_list (is_pair is_string is_value) InitEnv1
H10 : is_list is_slev ArgLevs
H11 : names_same [(RetVar, RVVal)::InitEnv1] [(RetVar, L)::ZP]
H12 : names_same [(RetVar, RVVal)::InitEnv] [(RetVar, L)::ZP]
H13 : is_list (is_pair is_string is_slev) ((RetVar, L)::ZP)
============================
 OB = OB
 < search.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (stmtExpr S E1)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (stmtExpr S E1) L
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (stmtExpr S E1) L
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvB : evalExpr FE EE_B (stmtExpr S E1) VB EE_B' OB
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply names_same_add_scope to NSA.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
============================
 OA = OB
 < apply names_same_add_scope to NSB.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
============================
 OA = OB
 < apply public_equiv_add_scope to PE.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 O1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O1 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
============================
 OA = OB
 < apply IH_S to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
============================
 OA = OB
 < apply evalStmt_isCtx to _ _ _ EvA1.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalStmt_isCtx to _ _ _ EvB.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply secure_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : names_same EE1 SG2
============================
 OA = OB
 < apply secure_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : names_same EE1 SG2
H9 : names_same EE2 SG2
============================
 OA = OB
 < apply stmt_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : names_same EE1 SG2
H9 : names_same EE2 SG2
H10 : public_equiv SG2 EE1 EE2
============================
 OA = OB
 < apply secure_is to _ _ _ Lev.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope O2 E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : names_same EE1 SG2
H9 : names_same EE2 SG2
H10 : public_equiv SG2 EE1 EE2
H11 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB EE1 Scope E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OA @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : names_same EE1 SG2
H9 : names_same EE2 SG2
H10 : public_equiv SG2 EE1 EE2
H11 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.2.24:

Variables: SF SG PC L FE EE_A EE_A' VA EE_B EE_B' VB OB EE1 Scope E1 S SG2 EE2 O3 Scope1 O4
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (stmtExpr S E1) VA EE_A' OB @
EvA1 : evalStmt FE ([]::EE_A) S EE1 O3 *
EvA2 : evalExpr FE EE1 E1 VA (Scope::EE_A') O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_stmt S
H2 : is_expr E1
Lev : secure SF ([]::SG) PC S SG2
Lev1 : level SF SG2 PC E1 L
EvB : evalStmt FE ([]::EE_B) S EE2 O3
EvB1 : evalExpr FE EE2 E1 VB (Scope1::EE_B') O4
EvB2 : O3 ++ O4 = OB
H3 : names_same ([]::EE_A) ([]::SG)
H4 : names_same ([]::EE_B) ([]::SG)
H5 : public_equiv ([]::SG) ([]::EE_A) ([]::EE_B)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : is_list (is_list (is_pair is_string is_value)) EE2
H8 : names_same EE1 SG2
H9 : names_same EE2 SG2
H10 : public_equiv SG2 EE1 EE2
H11 : is_list (is_list (is_pair is_string is_slev)) SG2
============================
 OB = OB
 < search.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (recBuild RF)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recBuild RF) L
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
============================
 OA = OB
 < case IsE.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recBuild RF) L
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB VF RF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvB : evalExpr FE EE_B (recBuild RF) VB EE_B' OB
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB VF RF VF1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OA @
EvA1 : evalRecFields FE EE_A RF VF EE_A' OA *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
EvB : evalRecFields FE EE_B RF VF1 EE_B' OB
============================
 OA = OB
 < apply IH_RF to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.25:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB VF RF VF1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recBuild RF) (recVal VF) EE_A' OB @
EvA1 : evalRecFields FE EE_A RF VF EE_A' OB *
H1 : is_recFieldExprs RF
Lev : levelRecFields SF SG PC RF L
EvB : evalRecFields FE EE_B RF VF1 EE_B' OB
============================
 OB = OB
 < search.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr (recFieldAccess Rec F)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recFieldAccess Rec F) L
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
============================
 OA = OB
 < case IsE.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC (recFieldAccess Rec F) L
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvB : evalExpr FE EE_B (recFieldAccess Rec F) VB EE_B' OB
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Fields F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OA @
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OA *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.2.26:

Variables: SF SG PC L FE EE_A EE_A' VA EE_B EE_B' VB OB Fields F Rec Fields1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A (recFieldAccess Rec F) VA EE_A' OB @
EvA1 : evalExpr FE EE_A Rec (recVal Fields) EE_A' OB *
EvA2 : lookup Fields F VA
H1 : is_expr Rec
H2 : is_string F
Lev : level SF SG PC Rec L
EvB : evalExpr FE EE_B Rec (recVal Fields1) EE_B' OB
EvB1 : lookup Fields1 F VB
============================
 OB = OB
 < search.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : level SF SG PC <unknown K evalExpr> L
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
============================
 OA = OB
 < apply names_is to _ EvA1.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
============================
 OA = OB
 < apply names_is_sec to _ Lev.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 OA = OB
 < apply proj_expr_unique to Lev1 EvA2 _ _ _ _ _.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names -> mem X Names1
 < intros M.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
============================
 mem X Names1
 < apply names_same_names to NSA EvA1 Lev M.

Subgoal 5.2.27.1:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names
H3 : mem X Names1
============================
 mem X Names1
 < search.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 forall X, mem X Names1 -> mem X Names
 < intros M.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
============================
 mem X Names
 < apply names_same_names_back to NSA EvA1 Lev M.

Subgoal 5.2.27.2:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 E_P1 X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P1
Lev2 : level SF SG PC E_P1 L
H1 : is_list is_string Names
H2 : is_list is_string Names1
M : mem X Names1
H3 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
============================
 OA = OB
 < apply proj_expr_is to Lev1 _ _.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
============================
 OA = OB
 < NSB-: apply names_same_symmetric to NSB.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
============================
 OA = OB
 < NSAB: apply names_same_transitive to NSA NSB-.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
============================
 OA = OB
 < NamesB: apply names_exists to IsEE_B.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
============================
 OA = OB
 < apply names_is to _ EvA1.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
============================
 OA = OB
 < apply names_is to _ NamesB.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
============================
 OA = OB
 < PrB: apply proj_expr_other to EvA2 _ _ _ with
          L' = N.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 OA = OB
 < apply proj_expr_unique to EvA2 PrB _ _ _ _ _.

Subgoal 5.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 forall X, mem X N -> mem X Names
 < intros M.

Subgoal 5.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
============================
 mem X Names
 < NSBA: apply names_same_symmetric to NSAB.

Subgoal 5.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
NSBA : names_same EE_B EE_A
============================
 mem X Names
 < apply names_same_names to NSBA NamesB EvA1 M.

Subgoal 5.2.27.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X N
NSBA : names_same EE_B EE_A
H6 : mem X Names
============================
 mem X Names
 < search.

Subgoal 5.2.27.4:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 forall X, mem X Names -> mem X N
 < intros M.

Subgoal 5.2.27.4:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X Names
============================
 mem X N
 < apply names_same_names to NSAB EvA1 NamesB M.

Subgoal 5.2.27.4:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names E_P V_P EE_P O_P Names1 N E'' X
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E_P
EvA3 : evalExpr FE EE_A E_P V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Lev2 : level SF SG PC E_P L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E_P
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
M : mem X Names
H6 : mem X N
============================
 mem X N
 < search.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
============================
 OA = OB
 < EvB': apply proj_evalExpr_forward to PrB NamesB _ _ _ EvB.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
============================
 OA = OB
 < EvA': apply proj_evalExpr_forward to EvA2 EvA1 _ _ _ EvA.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE'' EE''1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> VA EE_A' OA @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' VA EE''1 OA
EvA'1 : scopes_same EE_A' EE''1
============================
 OA = OB
 < apply evalExpr_unique to _ _ _ EvA' EvA3.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
============================
 O_P = OB
 < apply proj_expr_is to PrB _ _.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P O_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' O_P @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P O_P *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P O_P
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
============================
 O_P = OB
 < PE_Pr: apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev2 EvA3 EvB'.

Subgoal 5.2.27:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' VB OB Names V_P EE_P Names1 N E'' EE''
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsE : is_expr <unknown K evalExpr>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalExpr FE EE_A <unknown K evalExpr> V_P EE_A' OB @
EvB : evalExpr FE EE_B <unknown K evalExpr> VB EE_B' OB
EvA1 : names EE_A Names
EvA2 : Names |{expr}- <unknown K evalExpr> ~~> E''
EvA3 : evalExpr FE EE_A E'' V_P EE_P OB *
Lev : names SG Names1
Lev1 : Names1 |{expr}- <unknown K evalExpr> ~~> E''
Lev2 : level SF SG PC E'' L
H1 : is_list is_string Names
H2 : is_list is_string Names1
H3 : is_expr E''
NSB- : names_same SG EE_B
NSAB : names_same EE_A EE_B
NamesB : names EE_B N
H4 : is_list is_string Names
H5 : is_list is_string N
PrB : N |{expr}- <unknown K evalExpr> ~~> E''
EvB' : evalExpr FE EE_B E'' VB EE'' OB
EvB'1 : scopes_same EE_B' EE''
EvA' : evalExpr FE EE_A E'' V_P EE_P OB
EvA'1 : scopes_same EE_A' EE_P
H6 : is_expr E''
============================
 OB = OB
 < search.

Subgoal 5.3.1:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : levelArgs SF SG PC nilArgs L
EvA : evalArgs FE EE_A' nilArgs [] EE_A' [] @
EvB : evalArgs FE EE_B nilArgs VB EE_B' OB
============================
 [] = OB
 < case EvB.

Subgoal 5.3.1:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsA : is_args nilArgs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : levelArgs SF SG PC nilArgs L
EvA : evalArgs FE EE_A' nilArgs [] EE_A' [] @
============================
 [] = []
 < search.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsA : is_args (consArgs E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC (consArgs E Rest) L
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsA.

Subgoal 5.3.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC (consArgs E Rest) L
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V Rest E Rest1 L1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvB : evalArgs FE EE_B (consArgs E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_A to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' OA EE_B EE_B' OB EE1 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.3.2:

Variables: SF SG PC FE EE_A EE_A' EE_B EE_B' OB EE1 VRest V Rest E Rest1 L1 EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalArgs FE EE_A (consArgs E Rest) (V::VRest) EE_A' OB @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalArgs FE EE1 Rest VRest EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_expr E
H2 : is_args Rest
Lev : level SF SG PC E L1
Lev1 : levelArgs SF SG PC Rest Rest1
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalArgs FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H3 : is_list (is_list (is_pair is_string is_value)) EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : names_same EE1 SG
H6 : names_same EE2 SG
H7 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.3.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsA : is_args <unknown K evalArgs>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelArgs SF SG PC <unknown K evalArgs> L
EvA : evalArgs FE EE_A <unknown K evalArgs> VA EE_A' OA @
EvB : evalArgs FE EE_B <unknown K evalArgs> VB EE_B' OB
============================
 OA = OB
 < case Lev.

Subgoal 5.4.1:

Variables: SF SG PC L FE EE_A' EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A' EE_B
Lev : levelRecFields SF SG PC nilRecFieldExprs L
EvA : evalRecFields FE EE_A' nilRecFieldExprs [] EE_A' [] @
EvB : evalRecFields FE EE_B nilRecFieldExprs VB EE_B' OB
============================
 [] = OB
 < case EvB.

Subgoal 5.4.1:

Variables: SF SG PC L FE EE_A' EE_B'
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsRF : is_recFieldExprs nilRecFieldExprs
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A'
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B'
SFC : secFunCtxs SF FE
NSA : names_same EE_A' SG
NSB : names_same EE_B' SG
PE : public_equiv SG EE_A' EE_B'
Lev : levelRecFields SF SG PC nilRecFieldExprs L
EvA : evalRecFields FE EE_A' nilRecFieldExprs [] EE_A' [] @
============================
 [] = []
 < search.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
============================
 OA = OB
 < case IsRF.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC (consRecFieldExprs F E Rest) L
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 OA = OB
 < Lev: case Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' VB OB EE1 O1 O2 VRest V F Rest E LE LRF
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvB : evalRecFields FE EE_B (consRecFieldExprs F E Rest) VB EE_B' OB
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
============================
 OA = OB
 < EvB: case EvB.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O1 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O1 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply IH_E to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 EE_B' O4
EvB2 : O3 ++ O4 = OB
H4 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 OA = OB
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 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
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvA1 Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 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
H6 : names_same EE1 SG
============================
 OA = OB
 < apply level_eval_names_same to _ _ _ _ _ _ EvB Lev.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 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
H6 : names_same EE1 SG
H7 : names_same EE2 SG
============================
 OA = OB
 < apply expr_secure to _ _ _ _ _ _ _ _ _ _ _ Lev EvA1 EvB.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 O2 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O2 *
EvA3 : O3 ++ O2 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 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
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply IH_RF to _ _ _ _ _ _ _ _ _ _ _ Lev1 EvA2 EvB1.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' OA EE_B EE_B' OB EE1 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OA @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O4 *
EvA3 : O3 ++ O4 = OA
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 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
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE1 EE2
============================
 OA = OB
 < apply append_unique to EvA3 EvB2.

Subgoal 5.4.2:

Variables: SF SG PC L FE EE_A EE_A' EE_B EE_B' OB EE1 VRest V F Rest E LE LRF EE2 O3 O4 VRest1 V1
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
EvA : evalRecFields FE EE_A (consRecFieldExprs F E Rest) ((F, V)::VRest) EE_A' OB @
EvA1 : evalExpr FE EE_A E V EE1 O3 *
EvA2 : evalRecFields FE EE1 Rest VRest EE_A' O4 *
EvA3 : O3 ++ O4 = OB
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Lev : level SF SG PC E LE
Lev1 : levelRecFields SF SG PC Rest LRF
Lev2 : join LE LRF L
EvB : evalExpr FE EE_B E V1 EE2 O3
EvB1 : evalRecFields FE EE2 Rest VRest1 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
H6 : names_same EE1 SG
H7 : names_same EE2 SG
H8 : public_equiv SG EE1 EE2
============================
 OB = OB
 < search.

Subgoal 5.4.3:

Variables: SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB
IH_S : forall S SF SG PC SG' FE ScopeA EE_A EE_A' OA ScopeB EE_B EE_B' OB,
         is_stmt S -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) (ScopeA::EE_A) -> is_list (is_list (is_pair is_string is_value)) (ScopeB::EE_B) ->
         secFunCtxs SF FE -> names_same (ScopeA::EE_A) SG -> names_same (ScopeB::EE_B) SG ->
         public_equiv SG (ScopeA::EE_A) (ScopeB::EE_B) -> secure SF SG PC S SG' ->
         evalStmt FE (ScopeA::EE_A) S EE_A' OA * -> evalStmt FE (ScopeB::EE_B) S EE_B' OB ->
         OA = OB
IH_E : forall E SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_expr E -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         level SF SG PC E L -> evalExpr FE EE_A E VA EE_A' OA * -> evalExpr FE EE_B E VB EE_B' OB ->
         OA = OB
IH_A : forall A SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
         is_args A -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
         is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
         secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
         levelArgs SF SG PC A L -> evalArgs FE EE_A A VA EE_A' OA * -> evalArgs FE EE_B A VB EE_B' OB ->
         OA = OB
IH_RF : forall RF SF SG PC L FE EE_A EE_A' VA OA EE_B EE_B' VB OB,
          is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF ->
          is_list (is_list (is_pair is_string is_slev)) SG -> is_slev PC -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
          is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
          secFunCtxs SF FE -> names_same EE_A SG -> names_same EE_B SG -> public_equiv SG EE_A EE_B ->
          levelRecFields SF SG PC RF L -> evalRecFields FE EE_A RF VA EE_A' OA * ->
          evalRecFields FE EE_B RF VB EE_B' OB -> OA = OB
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsSF : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsSG : is_list (is_list (is_pair is_string is_slev)) SG
IsPC : is_slev PC
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsEE_A : is_list (is_list (is_pair is_string is_value)) EE_A
IsEE_B : is_list (is_list (is_pair is_string is_value)) EE_B
SFC : secFunCtxs SF FE
NSA : names_same EE_A SG
NSB : names_same EE_B SG
PE : public_equiv SG EE_A EE_B
Lev : levelRecFields SF SG PC <unknown K evalRecFields> L
EvA : evalRecFields FE EE_A <unknown K evalRecFields> VA EE_A' OA @
EvB : evalRecFields FE EE_B <unknown K evalRecFields> VB EE_B' OB
============================
 OA = OB
 < case Lev.

Proof completed.
 < Extensible_Theorem
      paramSec_is : forall P Name L,
         IsP : is_param P ->
         PS : paramSec P Name L ->
         is_string Name /\
         is_slev L
      on PS.

Subgoal 1:

Variables: Name Ty
IH : forall P Name L,
       is_param P -> paramSec P Name L * -> is_string Name /\ is_slev L
IsP : is_param (param Name Ty)
PS : paramSec (param Name Ty) Name public @
============================
 is_string Name /\ is_slev public
 < case IsP.

Subgoal 1:

Variables: Name Ty
IH : forall P Name L,
       is_param P -> paramSec P Name L * -> is_string Name /\ is_slev L
PS : paramSec (param Name Ty) Name public @
H1 : is_string Name
H2 : is_typ Ty
============================
 is_string Name /\ is_slev public
 < search.

Subgoal 2:

Variables: Name L Ty
IH : forall P Name L,
       is_param P -> paramSec P Name L * -> is_string Name /\ is_slev L
IsP : is_param (secparam Name Ty L)
PS : paramSec (secparam Name Ty L) Name L @
============================
 is_string Name /\ is_slev L
 < case IsP.

Subgoal 2:

Variables: Name L Ty
IH : forall P Name L,
       is_param P -> paramSec P Name L * -> is_string Name /\ is_slev L
PS : paramSec (secparam Name Ty L) Name L @
H1 : is_string Name
H2 : is_typ Ty
H3 : is_slev L
============================
 is_string Name /\ is_slev L
 < search.

Subgoal 3:

Variables: Name L P_P
IH : forall P Name L,
       is_param P -> paramSec P Name L * -> is_string Name /\ is_slev L
IsP : is_param <unknown I param>
PS : paramSec <unknown I param> Name L @
PS1 : |{param}- <unknown I param> ~~> P_P
PS2 : paramSec P_P Name L *
============================
 is_string Name /\ is_slev L
 < apply proj_param_is to PS1 _.

Subgoal 3:

Variables: Name L P_P
IH : forall P Name L,
       is_param P -> paramSec P Name L * -> is_string Name /\ is_slev L
IsP : is_param <unknown I param>
PS : paramSec <unknown I param> Name L @
PS1 : |{param}- <unknown I param> ~~> P_P
PS2 : paramSec P_P Name L *
H1 : is_param P_P
============================
 is_string Name /\ is_slev L
 < apply IH to _ PS2.

Subgoal 3:

Variables: Name L P_P
IH : forall P Name L,
       is_param P -> paramSec P Name L * -> is_string Name /\ is_slev L
IsP : is_param <unknown I param>
PS : paramSec <unknown I param> Name L @
PS1 : |{param}- <unknown I param> ~~> P_P
PS2 : paramSec P_P Name L *
H1 : is_param P_P
H2 : is_string Name
H3 : is_slev L
============================
 is_string Name /\ is_slev L
 < search.

Proof completed.
 < Theorem paramSecs_is :
     forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs -> is_list (is_pair is_string is_slev) PSecs.

============================
 forall Ps PSecs,
   is_list is_param Ps -> paramSecs Ps PSecs -> is_list (is_pair is_string is_slev) PSecs
 < induction on 2.

IH : forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs * -> is_list (is_pair is_string is_slev) PSecs
============================
 forall Ps PSecs,
   is_list is_param Ps -> paramSecs Ps PSecs @ -> is_list (is_pair is_string is_slev) PSecs
 < intros IsPs PS.

Variables: Ps PSecs
IH : forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs * -> is_list (is_pair is_string is_slev) PSecs
IsPs : is_list is_param Ps
PS : paramSecs Ps PSecs @
============================
 is_list (is_pair is_string is_slev) PSecs
 < PS: case PS.

Subgoal 1:

IH : forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs * -> is_list (is_pair is_string is_slev) PSecs
IsPs : is_list is_param []
============================
 is_list (is_pair is_string is_slev) []
 < search.

Subgoal 2:

Variables: SRest L Name PRest P
IH : forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs * -> is_list (is_pair is_string is_slev) PSecs
IsPs : is_list is_param (P::PRest)
PS : paramSec P Name L
PS1 : paramSecs PRest SRest *
============================
 is_list (is_pair is_string is_slev) ((Name, L)::SRest)
 < case IsPs.

Subgoal 2:

Variables: SRest L Name PRest P
IH : forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs * -> is_list (is_pair is_string is_slev) PSecs
PS : paramSec P Name L
PS1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
============================
 is_list (is_pair is_string is_slev) ((Name, L)::SRest)
 < apply paramSec_is to _ PS.

Subgoal 2:

Variables: SRest L Name PRest P
IH : forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs * -> is_list (is_pair is_string is_slev) PSecs
PS : paramSec P Name L
PS1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
H3 : is_string Name
H4 : is_slev L
============================
 is_list (is_pair is_string is_slev) ((Name, L)::SRest)
 < apply IH to _ PS1.

Subgoal 2:

Variables: SRest L Name PRest P
IH : forall Ps PSecs,
       is_list is_param Ps -> paramSecs Ps PSecs * -> is_list (is_pair is_string is_slev) PSecs
PS : paramSec P Name L
PS1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
H3 : is_string Name
H4 : is_slev L
H5 : is_list (is_pair is_string is_slev) SRest
============================
 is_list (is_pair is_string is_slev) ((Name, L)::SRest)
 < search.

Proof completed.
 < Theorem values_is_sec :
     forall L V,
       is_list (is_pair is_string is_slev) L -> values L V -> is_list is_slev V.

============================
 forall L V,
   is_list (is_pair is_string is_slev) L -> values L V -> is_list is_slev V
 < induction on 2.

IH : forall L V,
       is_list (is_pair is_string is_slev) L -> values L V * -> is_list is_slev V
============================
 forall L V,
   is_list (is_pair is_string is_slev) L -> values L V @ -> is_list is_slev V
 < intros IsL V.

Variables: L V
IH : forall L V,
       is_list (is_pair is_string is_slev) L -> values L V * -> is_list is_slev V
IsL : is_list (is_pair is_string is_slev) L
V : values L V @
============================
 is_list is_slev V
 < V: case V.

Subgoal 1:

IH : forall L V,
       is_list (is_pair is_string is_slev) L -> values L V * -> is_list is_slev V
IsL : is_list (is_pair is_string is_slev) []
============================
 is_list is_slev []
 < search.

Subgoal 2:

Variables: VRest B Rest A
IH : forall L V,
       is_list (is_pair is_string is_slev) L -> values L V * -> is_list is_slev V
IsL : is_list (is_pair is_string is_slev) ((A, B)::Rest)
V : values Rest VRest *
============================
 is_list is_slev (B::VRest)
 < Is: case IsL.

Subgoal 2:

Variables: VRest B Rest A
IH : forall L V,
       is_list (is_pair is_string is_slev) L -> values L V * -> is_list is_slev V
V : values Rest VRest *
Is : is_pair is_string is_slev (A, B)
Is1 : is_list (is_pair is_string is_slev) Rest
============================
 is_list is_slev (B::VRest)
 < case Is.

Subgoal 2:

Variables: VRest B Rest A
IH : forall L V,
       is_list (is_pair is_string is_slev) L -> values L V * -> is_list is_slev V
V : values Rest VRest *
Is1 : is_list (is_pair is_string is_slev) Rest
H1 : is_string A
H2 : is_slev B
============================
 is_list is_slev (B::VRest)
 < apply IH to _ V.

Subgoal 2:

Variables: VRest B Rest A
IH : forall L V,
       is_list (is_pair is_string is_slev) L -> values L V * -> is_list is_slev V
V : values Rest VRest *
Is1 : is_list (is_pair is_string is_slev) Rest
H1 : is_string A
H2 : is_slev B
H3 : is_list is_slev VRest
============================
 is_list is_slev (B::VRest)
 < search.

Proof completed.
 < Extensible_Theorem
      getFunSec_is : forall F Name RetLev PSecs,
         IsF : is_fun F ->
         GFS : getFunSec F Name RetLev PSecs ->
         (is_string Name /\ is_slev RetLev) /\
         is_list is_slev PSecs
      on GFS.

Subgoal 1:

Variables: Name PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
IsF : is_fun (fun Name RetTy RetVar RVVal Params Body)
GFS : getFunSec (fun Name RetTy RetVar RVVal Params Body) Name public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
============================
 (is_string Name /\ is_slev public) /\ is_list is_slev PSecs
 < case IsF.

Subgoal 1:

Variables: Name PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
GFS : getFunSec (fun Name RetTy RetVar RVVal Params Body) Name public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
============================
 (is_string Name /\ is_slev public) /\ is_list is_slev PSecs
 < apply paramSecs_is to _ GFS1.

Subgoal 1:

Variables: Name PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
GFS : getFunSec (fun Name RetTy RetVar RVVal Params Body) Name public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
H7 : is_list (is_pair is_string is_slev) ParamSecs
============================
 (is_string Name /\ is_slev public) /\ is_list is_slev PSecs
 < apply values_is_sec to _ GFS2.

Subgoal 1:

Variables: Name PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
GFS : getFunSec (fun Name RetTy RetVar RVVal Params Body) Name public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
H7 : is_list (is_pair is_string is_slev) ParamSecs
H8 : is_list is_slev PSecs
============================
 (is_string Name /\ is_slev public) /\ is_list is_slev PSecs
 < search.

Subgoal 2:

Variables: Name RetLev PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
IsF : is_fun (secfun Name RetTy RetLev RetVar RVVal Params Body)
GFS : getFunSec (secfun Name RetTy RetLev RetVar RVVal Params Body) Name RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
============================
 (is_string Name /\ is_slev RetLev) /\ is_list is_slev PSecs
 < case IsF.

Subgoal 2:

Variables: Name RetLev PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
GFS : getFunSec (secfun Name RetTy RetLev RetVar RVVal Params Body) Name RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
============================
 (is_string Name /\ is_slev RetLev) /\ is_list is_slev PSecs
 < apply paramSecs_is to _ GFS1.

Subgoal 2:

Variables: Name RetLev PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
GFS : getFunSec (secfun Name RetTy RetLev RetVar RVVal Params Body) Name RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
H8 : is_list (is_pair is_string is_slev) ParamSecs
============================
 (is_string Name /\ is_slev RetLev) /\ is_list is_slev PSecs
 < apply values_is_sec to _ GFS2.

Subgoal 2:

Variables: Name RetLev PSecs ParamSecs Body Params RVVal RetVar RetTy
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
GFS : getFunSec (secfun Name RetTy RetLev RetVar RVVal Params Body) Name RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
H8 : is_list (is_pair is_string is_slev) ParamSecs
H9 : is_list is_slev PSecs
============================
 (is_string Name /\ is_slev RetLev) /\ is_list is_slev PSecs
 < search.

Subgoal 3:

Variables: Name RetLev PSecs F_P
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
IsF : is_fun <unknown I fun>
GFS : getFunSec <unknown I fun> Name RetLev PSecs @
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P Name RetLev PSecs *
============================
 (is_string Name /\ is_slev RetLev) /\ is_list is_slev PSecs
 < apply proj_fun_is to GFS1 _.

Subgoal 3:

Variables: Name RetLev PSecs F_P
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
IsF : is_fun <unknown I fun>
GFS : getFunSec <unknown I fun> Name RetLev PSecs @
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P Name RetLev PSecs *
H1 : is_fun F_P
============================
 (is_string Name /\ is_slev RetLev) /\ is_list is_slev PSecs
 < apply IH to _ GFS2.

Subgoal 3:

Variables: Name RetLev PSecs F_P
IH : forall F Name RetLev PSecs,
       is_fun F -> getFunSec F Name RetLev PSecs * -> (is_string Name /\
       is_slev RetLev) /\
       is_list is_slev PSecs
IsF : is_fun <unknown I fun>
GFS : getFunSec <unknown I fun> Name RetLev PSecs @
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P Name RetLev PSecs *
H1 : is_fun F_P
H2 : is_string Name
H3 : is_slev RetLev
H4 : is_list is_slev PSecs
============================
 (is_string Name /\ is_slev RetLev) /\ is_list is_slev PSecs
 < search.

Proof completed.
 < Theorem gatherFunSecCtx_is :
     forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF.

============================
 forall Fs SF,
   is_list is_fun Fs -> gatherFunSecCtx Fs SF -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
 < induction on 2.

IH : forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF * -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
============================
 forall Fs SF,
   is_list is_fun Fs -> gatherFunSecCtx Fs SF @ -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
 < intros IsFs GFSC.

Variables: Fs SF
IH : forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF * -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsFs : is_list is_fun Fs
GFSC : gatherFunSecCtx Fs SF @
============================
 is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
 < GFSC: case GFSC.

Subgoal 1:

IH : forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF * -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsFs : is_list is_fun []
============================
 is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) []
 < search.

Subgoal 2:

Variables: SRest PSecs Lev Name FRest F
IH : forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF * -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
IsFs : is_list is_fun (F::FRest)
GFSC : getFunSec F Name Lev PSecs
GFSC1 : gatherFunSecCtx FRest SRest *
============================
 is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) ((Name, (Lev, PSecs))::SRest)
 < case IsFs.

Subgoal 2:

Variables: SRest PSecs Lev Name FRest F
IH : forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF * -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
GFSC : getFunSec F Name Lev PSecs
GFSC1 : gatherFunSecCtx FRest SRest *
H1 : is_fun F
H2 : is_list is_fun FRest
============================
 is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) ((Name, (Lev, PSecs))::SRest)
 < apply getFunSec_is to _ GFSC.

Subgoal 2:

Variables: SRest PSecs Lev Name FRest F
IH : forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF * -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
GFSC : getFunSec F Name Lev PSecs
GFSC1 : gatherFunSecCtx FRest SRest *
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : is_string Name
H4 : is_slev Lev
H5 : is_list is_slev PSecs
============================
 is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) ((Name, (Lev, PSecs))::SRest)
 < apply IH to _ GFSC1.

Subgoal 2:

Variables: SRest PSecs Lev Name FRest F
IH : forall Fs SF,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF * -> is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
GFSC : getFunSec F Name Lev PSecs
GFSC1 : gatherFunSecCtx FRest SRest *
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : is_string Name
H4 : is_slev Lev
H5 : is_list is_slev PSecs
H6 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SRest
============================
 is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) ((Name, (Lev, PSecs))::SRest)
 < search.

Proof completed.
 < Extensible_Theorem
      program_secure_is : forall P S,
         IsP : is_program P ->
         Sec : programSecure P S ->
         is_list is_slev S
      on Sec.

Subgoal 1:

Variables: S SF Name RetLev Main Funs
IH : forall P S, is_program P -> programSecure P S * -> is_list is_slev S
IsP : is_program (program Funs Main)
Sec : programSecure (program Funs Main) S @
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev S
Sec3 : funsSecure ((Name, (RetLev, S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, S))::SF) Main
============================
 is_list is_slev S
 < case IsP.

Subgoal 1:

Variables: S SF Name RetLev Main Funs
IH : forall P S, is_program P -> programSecure P S * -> is_list is_slev S
Sec : programSecure (program Funs Main) S @
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev S
Sec3 : funsSecure ((Name, (RetLev, S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
============================
 is_list is_slev S
 < apply getFunSec_is to _ Sec2.

Subgoal 1:

Variables: S SF Name RetLev Main Funs
IH : forall P S, is_program P -> programSecure P S * -> is_list is_slev S
Sec : programSecure (program Funs Main) S @
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev S
Sec3 : funsSecure ((Name, (RetLev, S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
H3 : is_string Name
H4 : is_slev RetLev
H5 : is_list is_slev S
============================
 is_list is_slev S
 < search.

Subgoal 2:

Variables: S P_P
IH : forall P S, is_program P -> programSecure P S * -> is_list is_slev S
IsP : is_program <unknown I program>
Sec : programSecure <unknown I program> S @
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P S *
============================
 is_list is_slev S
 < apply proj_program_is to Sec1 _.

Subgoal 2:

Variables: S P_P
IH : forall P S, is_program P -> programSecure P S * -> is_list is_slev S
IsP : is_program <unknown I program>
Sec : programSecure <unknown I program> S @
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P S *
H1 : is_program P_P
============================
 is_list is_slev S
 < apply IH to _ Sec2.

Subgoal 2:

Variables: S P_P
IH : forall P S, is_program P -> programSecure P S * -> is_list is_slev S
IsP : is_program <unknown I program>
Sec : programSecure <unknown I program> S @
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P S *
H1 : is_program P_P
H2 : is_list is_slev S
============================
 is_list is_slev S
 < search.

Proof completed.
 < Extensible_Theorem
      paramSec_unique : forall P NameA LA NameB LB,
         IsP : is_param P ->
         PSA : paramSec P NameA LA ->
         PSB : paramSec P NameB LB ->
         NameA = NameB /\
         LA = LB
      on PSA.

Subgoal 1:

Variables: NameA NameB LB Ty
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param (param NameA Ty)
PSA : paramSec (param NameA Ty) NameA public @
PSB : paramSec (param NameA Ty) NameB LB
============================
 NameA = NameB /\ public = LB
 < case PSB.

Subgoal 1:

Variables: NameB Ty
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param (param NameB Ty)
PSA : paramSec (param NameB Ty) NameB public @
============================
 NameB = NameB /\ public = public
 < search.

Subgoal 2:

Variables: NameA LA NameB LB Ty
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param (secparam NameA Ty LA)
PSA : paramSec (secparam NameA Ty LA) NameA LA @
PSB : paramSec (secparam NameA Ty LA) NameB LB
============================
 NameA = NameB /\ LA = LB
 < case PSB.

Subgoal 2:

Variables: NameB LB Ty
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param (secparam NameB Ty LB)
PSA : paramSec (secparam NameB Ty LB) NameB LB @
============================
 NameB = NameB /\ LB = LB
 < search.

Subgoal 3:

Variables: NameA LA NameB LB P_P
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param <unknown I param>
PSA : paramSec <unknown I param> NameA LA @
PSB : paramSec <unknown I param> NameB LB
PSA1 : |{param}- <unknown I param> ~~> P_P
PSA2 : paramSec P_P NameA LA *
============================
 NameA = NameB /\ LA = LB
 < PSB: case PSB.

Subgoal 3:

Variables: NameA LA NameB LB P_P P_P1
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param <unknown I param>
PSA : paramSec <unknown I param> NameA LA @
PSA1 : |{param}- <unknown I param> ~~> P_P
PSA2 : paramSec P_P NameA LA *
PSB : |{param}- <unknown I param> ~~> P_P1
PSB1 : paramSec P_P1 NameB LB
============================
 NameA = NameB /\ LA = LB
 < apply proj_param_unique to PSB PSA1 _.

Subgoal 3:

Variables: NameA LA NameB LB P_P
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param <unknown I param>
PSA : paramSec <unknown I param> NameA LA @
PSA1 : |{param}- <unknown I param> ~~> P_P
PSA2 : paramSec P_P NameA LA *
PSB : |{param}- <unknown I param> ~~> P_P
PSB1 : paramSec P_P NameB LB
============================
 NameA = NameB /\ LA = LB
 < apply proj_param_is to PSA1 _.

Subgoal 3:

Variables: NameA LA NameB LB P_P
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param <unknown I param>
PSA : paramSec <unknown I param> NameA LA @
PSA1 : |{param}- <unknown I param> ~~> P_P
PSA2 : paramSec P_P NameA LA *
PSB : |{param}- <unknown I param> ~~> P_P
PSB1 : paramSec P_P NameB LB
H1 : is_param P_P
============================
 NameA = NameB /\ LA = LB
 < apply IH to _ PSA2 PSB1.

Subgoal 3:

Variables: NameB LB P_P
IH : forall P NameA LA NameB LB,
       is_param P -> paramSec P NameA LA * -> paramSec P NameB LB -> NameA = NameB /\
       LA = LB
IsP : is_param <unknown I param>
PSA : paramSec <unknown I param> NameB LB @
PSA1 : |{param}- <unknown I param> ~~> P_P
PSA2 : paramSec P_P NameB LB *
PSB : |{param}- <unknown I param> ~~> P_P
PSB1 : paramSec P_P NameB LB
H1 : is_param P_P
============================
 NameB = NameB /\ LB = LB
 < search.

Proof completed.
 < Theorem paramSecs_unique :
     forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA -> paramSecs Ps PSecsB -> PSecsA = PSecsB.

============================
 forall Ps PSecsA PSecsB,
   is_list is_param Ps -> paramSecs Ps PSecsA -> paramSecs Ps PSecsB -> PSecsA = PSecsB
 < induction on 2.

IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
============================
 forall Ps PSecsA PSecsB,
   is_list is_param Ps -> paramSecs Ps PSecsA @ -> paramSecs Ps PSecsB -> PSecsA = PSecsB
 < intros IsPs PSA PSB.

Variables: Ps PSecsA PSecsB
IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
IsPs : is_list is_param Ps
PSA : paramSecs Ps PSecsA @
PSB : paramSecs Ps PSecsB
============================
 PSecsA = PSecsB
 < PSA: case PSA.

Subgoal 1:

Variables: PSecsB
IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
IsPs : is_list is_param []
PSB : paramSecs [] PSecsB
============================
 [] = PSecsB
 < case PSB.

Subgoal 1:

IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
IsPs : is_list is_param []
============================
 [] = []
 < search.

Subgoal 2:

Variables: PSecsB SRest L Name PRest P
IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
IsPs : is_list is_param (P::PRest)
PSB : paramSecs (P::PRest) PSecsB
PSA : paramSec P Name L
PSA1 : paramSecs PRest SRest *
============================
 (Name, L)::SRest = PSecsB
 < case IsPs.

Subgoal 2:

Variables: PSecsB SRest L Name PRest P
IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
PSB : paramSecs (P::PRest) PSecsB
PSA : paramSec P Name L
PSA1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
============================
 (Name, L)::SRest = PSecsB
 < PSB: case PSB.

Subgoal 2:

Variables: SRest L Name PRest P SRest1 L1 Name1
IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
PSA : paramSec P Name L
PSA1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
PSB : paramSec P Name1 L1
PSB1 : paramSecs PRest SRest1
============================
 (Name, L)::SRest = (Name1, L1)::SRest1
 < apply paramSec_unique to _ PSA PSB.

Subgoal 2:

Variables: SRest PRest P SRest1 L1 Name1
IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
PSA : paramSec P Name1 L1
PSA1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
PSB : paramSec P Name1 L1
PSB1 : paramSecs PRest SRest1
============================
 (Name1, L1)::SRest = (Name1, L1)::SRest1
 < apply IH to _ PSA1 PSB1.

Subgoal 2:

Variables: PRest P SRest1 L1 Name1
IH : forall Ps PSecsA PSecsB,
       is_list is_param Ps -> paramSecs Ps PSecsA * -> paramSecs Ps PSecsB -> PSecsA = PSecsB
PSA : paramSec P Name1 L1
PSA1 : paramSecs PRest SRest1 *
H1 : is_param P
H2 : is_list is_param PRest
PSB : paramSec P Name1 L1
PSB1 : paramSecs PRest SRest1
============================
 (Name1, L1)::SRest1 = (Name1, L1)::SRest1
 < search.

Proof completed.
 < Extensible_Theorem
      getFunSec_unique : forall F NA LA PSA NB LB PSB,
         IsF : is_fun F ->
         GFSA : getFunSec F NA LA PSA ->
         GFSB : getFunSec F NB LB PSB ->
         (NA = NB /\ LA = LB) /\
         PSA = PSB
      on GFSA.

Subgoal 1:

Variables: NA PSA NB LB PSB ParamSecs Body Params RVVal RetVar RetTy
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun (fun NA RetTy RetVar RVVal Params Body)
GFSA : getFunSec (fun NA RetTy RetVar RVVal Params Body) NA public PSA @
GFSB : getFunSec (fun NA RetTy RetVar RVVal Params Body) NB LB PSB
GFSA1 : paramSecs Params ParamSecs
GFSA2 : values ParamSecs PSA
============================
 (NA = NB /\ public = LB) /\ PSA = PSB
 < GFSB: case GFSB.

Subgoal 1:

Variables: PSA NB PSB ParamSecs Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun (fun NB RetTy RetVar RVVal Params Body)
GFSA : getFunSec (fun NB RetTy RetVar RVVal Params Body) NB public PSA @
GFSA1 : paramSecs Params ParamSecs
GFSA2 : values ParamSecs PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSB
============================
 (NB = NB /\ public = public) /\ PSA = PSB
 < case IsF.

Subgoal 1:

Variables: PSA NB PSB ParamSecs Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
GFSA : getFunSec (fun NB RetTy RetVar RVVal Params Body) NB public PSA @
GFSA1 : paramSecs Params ParamSecs
GFSA2 : values ParamSecs PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSB
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
============================
 (NB = NB /\ public = public) /\ PSA = PSB
 < apply paramSecs_unique to _ GFSA1 GFSB.

Subgoal 1:

Variables: PSA NB PSB Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
GFSA : getFunSec (fun NB RetTy RetVar RVVal Params Body) NB public PSA @
GFSA1 : paramSecs Params ParamSecs1
GFSA2 : values ParamSecs1 PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSB
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
============================
 (NB = NB /\ public = public) /\ PSA = PSB
 < apply values_unique to GFSB1 GFSA2.

Subgoal 1:

Variables: PSA NB Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
GFSA : getFunSec (fun NB RetTy RetVar RVVal Params Body) NB public PSA @
GFSA1 : paramSecs Params ParamSecs1
GFSA2 : values ParamSecs1 PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSA
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
============================
 (NB = NB /\ public = public) /\ PSA = PSA
 < search.

Subgoal 2:

Variables: NA LA PSA NB LB PSB ParamSecs Body Params RVVal RetVar RetTy
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun (secfun NA RetTy LA RetVar RVVal Params Body)
GFSA : getFunSec (secfun NA RetTy LA RetVar RVVal Params Body) NA LA PSA @
GFSB : getFunSec (secfun NA RetTy LA RetVar RVVal Params Body) NB LB PSB
GFSA1 : paramSecs Params ParamSecs
GFSA2 : values ParamSecs PSA
============================
 (NA = NB /\ LA = LB) /\ PSA = PSB
 < GFSB: case GFSB.

Subgoal 2:

Variables: PSA NB LB PSB ParamSecs Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun (secfun NB RetTy LB RetVar RVVal Params Body)
GFSA : getFunSec (secfun NB RetTy LB RetVar RVVal Params Body) NB LB PSA @
GFSA1 : paramSecs Params ParamSecs
GFSA2 : values ParamSecs PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSB
============================
 (NB = NB /\ LB = LB) /\ PSA = PSB
 < case IsF.

Subgoal 2:

Variables: PSA NB LB PSB ParamSecs Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
GFSA : getFunSec (secfun NB RetTy LB RetVar RVVal Params Body) NB LB PSA @
GFSA1 : paramSecs Params ParamSecs
GFSA2 : values ParamSecs PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSB
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_slev LB
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
============================
 (NB = NB /\ LB = LB) /\ PSA = PSB
 < apply paramSecs_unique to _ GFSA1 GFSB.

Subgoal 2:

Variables: PSA NB LB PSB Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
GFSA : getFunSec (secfun NB RetTy LB RetVar RVVal Params Body) NB LB PSA @
GFSA1 : paramSecs Params ParamSecs1
GFSA2 : values ParamSecs1 PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSB
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_slev LB
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
============================
 (NB = NB /\ LB = LB) /\ PSA = PSB
 < apply values_unique to GFSB1 GFSA2.

Subgoal 2:

Variables: PSA NB LB Body Params RVVal RetVar RetTy ParamSecs1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
GFSA : getFunSec (secfun NB RetTy LB RetVar RVVal Params Body) NB LB PSA @
GFSA1 : paramSecs Params ParamSecs1
GFSA2 : values ParamSecs1 PSA
GFSB : paramSecs Params ParamSecs1
GFSB1 : values ParamSecs1 PSA
H1 : is_string NB
H2 : is_typ RetTy
H3 : is_slev LB
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
============================
 (NB = NB /\ LB = LB) /\ PSA = PSA
 < search.

Subgoal 3:

Variables: NA LA PSA NB LB PSB F_P
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun <unknown I fun>
GFSA : getFunSec <unknown I fun> NA LA PSA @
GFSB : getFunSec <unknown I fun> NB LB PSB
GFSA1 : |{fun}- <unknown I fun> ~~> F_P
GFSA2 : getFunSec F_P NA LA PSA *
============================
 (NA = NB /\ LA = LB) /\ PSA = PSB
 < GFSB: case GFSB.

Subgoal 3:

Variables: NA LA PSA NB LB PSB F_P F_P1
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun <unknown I fun>
GFSA : getFunSec <unknown I fun> NA LA PSA @
GFSA1 : |{fun}- <unknown I fun> ~~> F_P
GFSA2 : getFunSec F_P NA LA PSA *
GFSB : |{fun}- <unknown I fun> ~~> F_P1
GFSB1 : getFunSec F_P1 NB LB PSB
============================
 (NA = NB /\ LA = LB) /\ PSA = PSB
 < apply proj_fun_unique to GFSB GFSA1 _.

Subgoal 3:

Variables: NA LA PSA NB LB PSB F_P
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun <unknown I fun>
GFSA : getFunSec <unknown I fun> NA LA PSA @
GFSA1 : |{fun}- <unknown I fun> ~~> F_P
GFSA2 : getFunSec F_P NA LA PSA *
GFSB : |{fun}- <unknown I fun> ~~> F_P
GFSB1 : getFunSec F_P NB LB PSB
============================
 (NA = NB /\ LA = LB) /\ PSA = PSB
 < apply proj_fun_is to GFSA1 _.

Subgoal 3:

Variables: NA LA PSA NB LB PSB F_P
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun <unknown I fun>
GFSA : getFunSec <unknown I fun> NA LA PSA @
GFSA1 : |{fun}- <unknown I fun> ~~> F_P
GFSA2 : getFunSec F_P NA LA PSA *
GFSB : |{fun}- <unknown I fun> ~~> F_P
GFSB1 : getFunSec F_P NB LB PSB
H1 : is_fun F_P
============================
 (NA = NB /\ LA = LB) /\ PSA = PSB
 < apply IH to _ GFSA2 GFSB1.

Subgoal 3:

Variables: NB LB PSB F_P
IH : forall F NA LA PSA NB LB PSB,
       is_fun F -> getFunSec F NA LA PSA * -> getFunSec F NB LB PSB -> (NA = NB /\
       LA = LB) /\
       PSA = PSB
IsF : is_fun <unknown I fun>
GFSA : getFunSec <unknown I fun> NB LB PSB @
GFSA1 : |{fun}- <unknown I fun> ~~> F_P
GFSA2 : getFunSec F_P NB LB PSB *
GFSB : |{fun}- <unknown I fun> ~~> F_P
GFSB1 : getFunSec F_P NB LB PSB
H1 : is_fun F_P
============================
 (NB = NB /\ LB = LB) /\ PSB = PSB
 < search.

Proof completed.
 < Theorem gatherFunSecCtx_unique :
     forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA -> gatherFunSecCtx Fs SFB -> SFA = SFB.

============================
 forall Fs SFA SFB,
   is_list is_fun Fs -> gatherFunSecCtx Fs SFA -> gatherFunSecCtx Fs SFB -> SFA = SFB
 < induction on 2.

IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
============================
 forall Fs SFA SFB,
   is_list is_fun Fs -> gatherFunSecCtx Fs SFA @ -> gatherFunSecCtx Fs SFB -> SFA = SFB
 < intros IsFs GA GB.

Variables: Fs SFA SFB
IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
IsFs : is_list is_fun Fs
GA : gatherFunSecCtx Fs SFA @
GB : gatherFunSecCtx Fs SFB
============================
 SFA = SFB
 < GA: case GA.

Subgoal 1:

Variables: SFB
IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
IsFs : is_list is_fun []
GB : gatherFunSecCtx [] SFB
============================
 [] = SFB
 < case GB.

Subgoal 1:

IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
IsFs : is_list is_fun []
============================
 [] = []
 < search.

Subgoal 2:

Variables: SFB SRest PSecs Lev Name FRest F
IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
IsFs : is_list is_fun (F::FRest)
GB : gatherFunSecCtx (F::FRest) SFB
GA : getFunSec F Name Lev PSecs
GA1 : gatherFunSecCtx FRest SRest *
============================
 (Name, (Lev, PSecs))::SRest = SFB
 < GB: case GB.

Subgoal 2:

Variables: SRest PSecs Lev Name FRest F SRest1 PSecs1 Lev1 Name1
IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
IsFs : is_list is_fun (F::FRest)
GA : getFunSec F Name Lev PSecs
GA1 : gatherFunSecCtx FRest SRest *
GB : getFunSec F Name1 Lev1 PSecs1
GB1 : gatherFunSecCtx FRest SRest1
============================
 (Name, (Lev, PSecs))::SRest = (Name1, (Lev1, PSecs1))::SRest1
 < case IsFs.

Subgoal 2:

Variables: SRest PSecs Lev Name FRest F SRest1 PSecs1 Lev1 Name1
IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
GA : getFunSec F Name Lev PSecs
GA1 : gatherFunSecCtx FRest SRest *
GB : getFunSec F Name1 Lev1 PSecs1
GB1 : gatherFunSecCtx FRest SRest1
H1 : is_fun F
H2 : is_list is_fun FRest
============================
 (Name, (Lev, PSecs))::SRest = (Name1, (Lev1, PSecs1))::SRest1
 < apply getFunSec_unique to _ GA GB.

Subgoal 2:

Variables: SRest FRest F SRest1 PSecs1 Lev1 Name1
IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
GA : getFunSec F Name1 Lev1 PSecs1
GA1 : gatherFunSecCtx FRest SRest *
GB : getFunSec F Name1 Lev1 PSecs1
GB1 : gatherFunSecCtx FRest SRest1
H1 : is_fun F
H2 : is_list is_fun FRest
============================
 (Name1, (Lev1, PSecs1))::SRest = (Name1, (Lev1, PSecs1))::SRest1
 < apply IH to _ GA1 GB1.

Subgoal 2:

Variables: FRest F SRest1 PSecs1 Lev1 Name1
IH : forall Fs SFA SFB,
       is_list is_fun Fs -> gatherFunSecCtx Fs SFA * -> gatherFunSecCtx Fs SFB ->
       SFA = SFB
GA : getFunSec F Name1 Lev1 PSecs1
GA1 : gatherFunSecCtx FRest SRest1 *
GB : getFunSec F Name1 Lev1 PSecs1
GB1 : gatherFunSecCtx FRest SRest1
H1 : is_fun F
H2 : is_list is_fun FRest
============================
 (Name1, (Lev1, PSecs1))::SRest1 = (Name1, (Lev1, PSecs1))::SRest1
 < search.

Proof completed.
 < Extensible_Theorem
      program_secure_unique : forall P A B,
         IsP : is_program P ->
         SecA : programSecure P A ->
         SecB : programSecure P B ->
         A = B
      on SecA.

Subgoal 1:

Variables: A B SF Name RetLev Main Funs
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
IsP : is_program (program Funs Main)
SecA : programSecure (program Funs Main) A @
SecB : programSecure (program Funs Main) B
SecA1 : gatherFunSecCtx Funs SF
SecA2 : getFunSec Main Name RetLev A
SecA3 : funsSecure ((Name, (RetLev, A))::SF) Funs
SecA4 : funSecure ((Name, (RetLev, A))::SF) Main
============================
 A = B
 < SecB: case SecB.

Subgoal 1:

Variables: A B SF Name RetLev Main Funs SF1 Name1 RetLev1
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
IsP : is_program (program Funs Main)
SecA : programSecure (program Funs Main) A @
SecA1 : gatherFunSecCtx Funs SF
SecA2 : getFunSec Main Name RetLev A
SecA3 : funsSecure ((Name, (RetLev, A))::SF) Funs
SecA4 : funSecure ((Name, (RetLev, A))::SF) Main
SecB : gatherFunSecCtx Funs SF1
SecB1 : getFunSec Main Name1 RetLev1 B
SecB2 : funsSecure ((Name1, (RetLev1, B))::SF1) Funs
SecB3 : funSecure ((Name1, (RetLev1, B))::SF1) Main
============================
 A = B
 < case IsP.

Subgoal 1:

Variables: A B SF Name RetLev Main Funs SF1 Name1 RetLev1
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
SecA : programSecure (program Funs Main) A @
SecA1 : gatherFunSecCtx Funs SF
SecA2 : getFunSec Main Name RetLev A
SecA3 : funsSecure ((Name, (RetLev, A))::SF) Funs
SecA4 : funSecure ((Name, (RetLev, A))::SF) Main
SecB : gatherFunSecCtx Funs SF1
SecB1 : getFunSec Main Name1 RetLev1 B
SecB2 : funsSecure ((Name1, (RetLev1, B))::SF1) Funs
SecB3 : funSecure ((Name1, (RetLev1, B))::SF1) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
============================
 A = B
 < apply getFunSec_unique to _ SecA2 SecB1.

Subgoal 1:

Variables: B SF Main Funs SF1 Name1 RetLev1
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
SecA : programSecure (program Funs Main) B @
SecA1 : gatherFunSecCtx Funs SF
SecA2 : getFunSec Main Name1 RetLev1 B
SecA3 : funsSecure ((Name1, (RetLev1, B))::SF) Funs
SecA4 : funSecure ((Name1, (RetLev1, B))::SF) Main
SecB : gatherFunSecCtx Funs SF1
SecB1 : getFunSec Main Name1 RetLev1 B
SecB2 : funsSecure ((Name1, (RetLev1, B))::SF1) Funs
SecB3 : funSecure ((Name1, (RetLev1, B))::SF1) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
============================
 B = B
 < search.

Subgoal 2:

Variables: A B P_P
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
IsP : is_program <unknown I program>
SecA : programSecure <unknown I program> A @
SecB : programSecure <unknown I program> B
SecA1 : |{program}- <unknown I program> ~~> P_P
SecA2 : programSecure P_P A *
============================
 A = B
 < SecB: case SecB.

Subgoal 2:

Variables: A B P_P P_P1
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
IsP : is_program <unknown I program>
SecA : programSecure <unknown I program> A @
SecA1 : |{program}- <unknown I program> ~~> P_P
SecA2 : programSecure P_P A *
SecB : |{program}- <unknown I program> ~~> P_P1
SecB1 : programSecure P_P1 B
============================
 A = B
 < apply proj_program_unique to SecB SecA1 _.

Subgoal 2:

Variables: A B P_P
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
IsP : is_program <unknown I program>
SecA : programSecure <unknown I program> A @
SecA1 : |{program}- <unknown I program> ~~> P_P
SecA2 : programSecure P_P A *
SecB : |{program}- <unknown I program> ~~> P_P
SecB1 : programSecure P_P B
============================
 A = B
 < apply proj_program_is to SecA1 _.

Subgoal 2:

Variables: A B P_P
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
IsP : is_program <unknown I program>
SecA : programSecure <unknown I program> A @
SecA1 : |{program}- <unknown I program> ~~> P_P
SecA2 : programSecure P_P A *
SecB : |{program}- <unknown I program> ~~> P_P
SecB1 : programSecure P_P B
H1 : is_program P_P
============================
 A = B
 < apply IH to _ SecA2 SecB1.

Subgoal 2:

Variables: B P_P
IH : forall P A B,
       is_program P -> programSecure P A * -> programSecure P B -> A = B
IsP : is_program <unknown I program>
SecA : programSecure <unknown I program> B @
SecA1 : |{program}- <unknown I program> ~~> P_P
SecA2 : programSecure P_P B *
SecB : |{program}- <unknown I program> ~~> P_P
SecB1 : programSecure P_P B
H1 : is_program P_P
============================
 B = B
 < search.

Proof completed.
 < Extensible_Theorem
      paramName_paramSec : forall P N NS L,
         IsP : is_param P ->
         PN : paramName P N ->
         PS : paramSec P NS L ->
         N = NS
      on PS.

Subgoal 1:

Variables: N NS Ty
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param (param NS Ty)
PN : paramName (param NS Ty) N
PS : paramSec (param NS Ty) NS public @
============================
 N = NS
 < case PN.

Subgoal 1:

Variables: N Ty
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param (param N Ty)
PS : paramSec (param N Ty) N public @
============================
 N = N
 < search.

Subgoal 2:

Variables: N NS L Ty
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param (secparam NS Ty L)
PN : paramName (secparam NS Ty L) N
PS : paramSec (secparam NS Ty L) NS L @
============================
 N = NS
 < case PN.

Subgoal 2:

Variables: N L Ty
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param (secparam N Ty L)
PS : paramSec (secparam N Ty L) N L @
============================
 N = N
 < search.

Subgoal 3:

Variables: N NS L P_P
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param <unknown I param>
PN : paramName <unknown I param> N
PS : paramSec <unknown I param> NS L @
PS1 : |{param}- <unknown I param> ~~> P_P
PS2 : paramSec P_P NS L *
============================
 N = NS
 < PN': apply proj_paramName_forward to PS1 _ PN.

Subgoal 3:

Variables: N NS L P_P
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param <unknown I param>
PN : paramName <unknown I param> N
PS : paramSec <unknown I param> NS L @
PS1 : |{param}- <unknown I param> ~~> P_P
PS2 : paramSec P_P NS L *
PN' : paramName P_P N
============================
 N = NS
 < apply proj_param_is to PS1 _.

Subgoal 3:

Variables: N NS L P_P
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param <unknown I param>
PN : paramName <unknown I param> N
PS : paramSec <unknown I param> NS L @
PS1 : |{param}- <unknown I param> ~~> P_P
PS2 : paramSec P_P NS L *
PN' : paramName P_P N
H1 : is_param P_P
============================
 N = NS
 < apply IH to _ PN' PS2.

Subgoal 3:

Variables: NS L P_P
IH : forall P N NS L, is_param P -> paramName P N -> paramSec P NS L * -> N = NS
IsP : is_param <unknown I param>
PN : paramName <unknown I param> NS
PS : paramSec <unknown I param> NS L @
PS1 : |{param}- <unknown I param> ~~> P_P
PS2 : paramSec P_P NS L *
PN' : paramName P_P NS
H1 : is_param P_P
============================
 NS = NS
 < search.

Proof completed.
 < Theorem paramNames_paramSecs :
     forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs -> domain PSecs PNs.

============================
 forall Ps PNs PSecs,
   is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs -> domain PSecs PNs
 < induction on 3.

IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
============================
 forall Ps PNs PSecs,
   is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs @ -> domain PSecs PNs
 < intros IsPs PNs PSecs.

Variables: Ps PNs PSecs
IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
IsPs : is_list is_param Ps
PNs : paramNames Ps PNs
PSecs : paramSecs Ps PSecs @
============================
 domain PSecs PNs
 < PSecs: case PSecs.

Subgoal 1:

Variables: PNs
IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
IsPs : is_list is_param []
PNs : paramNames [] PNs
============================
 domain [] PNs
 < case PNs.

Subgoal 1:

IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
IsPs : is_list is_param []
============================
 domain [] []
 < search.

Subgoal 2:

Variables: PNs SRest L Name PRest P
IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
IsPs : is_list is_param (P::PRest)
PNs : paramNames (P::PRest) PNs
PSecs : paramSec P Name L
PSecs1 : paramSecs PRest SRest *
============================
 domain ((Name, L)::SRest) PNs
 < case IsPs.

Subgoal 2:

Variables: PNs SRest L Name PRest P
IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
PNs : paramNames (P::PRest) PNs
PSecs : paramSec P Name L
PSecs1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
============================
 domain ((Name, L)::SRest) PNs
 < PNs: case PNs.

Subgoal 2:

Variables: SRest L Name PRest P NRest N
IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
PSecs : paramSec P Name L
PSecs1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
PNs : paramName P N
PNs1 : paramNames PRest NRest
============================
 domain ((Name, L)::SRest) (N::NRest)
 < apply paramName_paramSec to _ PNs PSecs.

Subgoal 2:

Variables: SRest L Name PRest P NRest
IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
PSecs : paramSec P Name L
PSecs1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
PNs : paramName P Name
PNs1 : paramNames PRest NRest
============================
 domain ((Name, L)::SRest) (Name::NRest)
 < apply IH to _ PNs1 PSecs1.

Subgoal 2:

Variables: SRest L Name PRest P NRest
IH : forall Ps PNs PSecs,
       is_list is_param Ps -> paramNames Ps PNs -> paramSecs Ps PSecs * -> domain PSecs PNs
PSecs : paramSec P Name L
PSecs1 : paramSecs PRest SRest *
H1 : is_param P
H2 : is_list is_param PRest
PNs : paramName P Name
PNs1 : paramNames PRest NRest
H3 : domain SRest NRest
============================
 domain ((Name, L)::SRest) (Name::NRest)
 < search.

Proof completed.
 < Theorem domain_values_zip  [A, B] :
     forall (L : list (pair A B)) D V, domain L D -> values L V -> zip D V L.

============================
 forall L D V, domain L D -> values L V -> zip D V L
 < induction on 1.

IH : forall L D V, domain L D * -> values L V -> zip D V L
============================
 forall L D V, domain L D @ -> values L V -> zip D V L
 < intros D V.

Variables: L D V
IH : forall L D V, domain L D * -> values L V -> zip D V L
D : domain L D @
V : values L V
============================
 zip D V L
 < D: case D.

Subgoal 1:

Variables: V
IH : forall L D V, domain L D * -> values L V -> zip D V L
V : values [] V
============================
 zip [] V []
 < case V.

Subgoal 1:

IH : forall L D V, domain L D * -> values L V -> zip D V L
============================
 zip [] [] []
 < search.

Subgoal 2:

Variables: V DRest A Rest B
IH : forall L D V, domain L D * -> values L V -> zip D V L
V : values ((A, B)::Rest) V
D : domain Rest DRest *
============================
 zip (A::DRest) V ((A, B)::Rest)
 < V: case V.

Subgoal 2:

Variables: DRest A Rest B VRest
IH : forall L D V, domain L D * -> values L V -> zip D V L
D : domain Rest DRest *
V : values Rest VRest
============================
 zip (A::DRest) (B::VRest) ((A, B)::Rest)
 < apply IH to D V.

Subgoal 2:

Variables: DRest A Rest B VRest
IH : forall L D V, domain L D * -> values L V -> zip D V L
D : domain Rest DRest *
V : values Rest VRest
H1 : zip DRest VRest Rest
============================
 zip (A::DRest) (B::VRest) ((A, B)::Rest)
 < search.

Proof completed.
 < Extensible_Theorem
      getFun_sec : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
         IsF : is_fun F ->
         GFEI : getFunEvalInfo F FName RetVar RVVal PNames Body ->
         GFS : getFunSec F SName RetLev PSecs ->
         FS : funSecure SF F ->
         exists ZP SG,
           (FName = SName /\ zip PNames PSecs ZP) /\
           secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
      on GFS.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body SName PSecs SF ParamSecs Body1 Params RVVal1 RetVar1 RetTy
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun (fun SName RetTy RetVar1 RVVal1 Params Body1)
GFEI : getFunEvalInfo (fun SName RetTy RetVar1 RVVal1 Params Body1) FName RetVar RVVal PNames Body
GFS : getFunSec (fun SName RetTy RetVar1 RVVal1 Params Body1) SName public PSecs @
FS : funSecure SF (fun SName RetTy RetVar1 RVVal1 Params Body1)
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < case IsF.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body SName PSecs SF ParamSecs Body1 Params RVVal1 RetVar1 RetTy
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFEI : getFunEvalInfo (fun SName RetTy RetVar1 RVVal1 Params Body1) FName RetVar RVVal PNames Body
GFS : getFunSec (fun SName RetTy RetVar1 RVVal1 Params Body1) SName public PSecs @
FS : funSecure SF (fun SName RetTy RetVar1 RVVal1 Params Body1)
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string SName
H2 : is_typ RetTy
H3 : is_string RetVar1
H4 : is_value RVVal1
H5 : is_list is_param Params
H6 : is_stmt Body1
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < GFEI: case GFEI.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body PSecs SF ParamSecs Params RetTy
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (fun FName RetTy RetVar RVVal Params Body) FName public PSecs @
FS : funSecure SF (fun FName RetTy RetVar RVVal Params Body)
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
GFEI : paramNames Params PNames
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < FS: case FS.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body PSecs SF ParamSecs Params RetTy ParamSecs1 SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (fun FName RetTy RetVar RVVal Params Body) FName public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs1
FS1 : secure SF [(RetVar, public)::ParamSecs1] public Body SG
FS2 : lookup SF FName (public, PSecs1)
FS3 : values ParamSecs1 PSecs1
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < Dmn: apply paramNames_paramSecs to _ GFEI FS.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body PSecs SF ParamSecs Params RetTy ParamSecs1 SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (fun FName RetTy RetVar RVVal Params Body) FName public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs1
FS1 : secure SF [(RetVar, public)::ParamSecs1] public Body SG
FS2 : lookup SF FName (public, PSecs1)
FS3 : values ParamSecs1 PSecs1
Dmn : domain ParamSecs1 PNames
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < Z: apply domain_values_zip to Dmn FS3.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body PSecs SF ParamSecs Params RetTy ParamSecs1 SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (fun FName RetTy RetVar RVVal Params Body) FName public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs1
FS1 : secure SF [(RetVar, public)::ParamSecs1] public Body SG
FS2 : lookup SF FName (public, PSecs1)
FS3 : values ParamSecs1 PSecs1
Dmn : domain ParamSecs1 PNames
Z : zip PNames PSecs1 ParamSecs1
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < apply paramSecs_unique to _ FS GFS1.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body PSecs SF ParamSecs Params RetTy SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (fun FName RetTy RetVar RVVal Params Body) FName public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs
FS1 : secure SF [(RetVar, public)::ParamSecs] public Body SG
FS2 : lookup SF FName (public, PSecs1)
FS3 : values ParamSecs PSecs1
Dmn : domain ParamSecs PNames
Z : zip PNames PSecs1 ParamSecs
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < apply values_unique to FS3 GFS2.

Subgoal 1:

Variables: FName RetVar RVVal PNames Body PSecs SF ParamSecs Params RetTy SG
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (fun FName RetTy RetVar RVVal Params Body) FName public PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs
FS1 : secure SF [(RetVar, public)::ParamSecs] public Body SG
FS2 : lookup SF FName (public, PSecs)
FS3 : values ParamSecs PSecs
Dmn : domain ParamSecs PNames
Z : zip PNames PSecs ParamSecs
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, public)::ZP] public Body SG
 < search.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body SName RetLev PSecs SF ParamSecs Body1 Params RVVal1 RetVar1 RetTy
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun (secfun SName RetTy RetLev RetVar1 RVVal1 Params Body1)
GFEI : getFunEvalInfo (secfun SName RetTy RetLev RetVar1 RVVal1 Params Body1) FName RetVar RVVal PNames Body
GFS : getFunSec (secfun SName RetTy RetLev RetVar1 RVVal1 Params Body1) SName RetLev PSecs @
FS : funSecure SF (secfun SName RetTy RetLev RetVar1 RVVal1 Params Body1)
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < case IsF.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body SName RetLev PSecs SF ParamSecs Body1 Params RVVal1 RetVar1 RetTy
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFEI : getFunEvalInfo (secfun SName RetTy RetLev RetVar1 RVVal1 Params Body1) FName RetVar RVVal PNames Body
GFS : getFunSec (secfun SName RetTy RetLev RetVar1 RVVal1 Params Body1) SName RetLev PSecs @
FS : funSecure SF (secfun SName RetTy RetLev RetVar1 RVVal1 Params Body1)
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string SName
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar1
H5 : is_value RVVal1
H6 : is_list is_param Params
H7 : is_stmt Body1
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < GFEI: case GFEI.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body RetLev PSecs SF ParamSecs Params RetTy
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (secfun FName RetTy RetLev RetVar RVVal Params Body) FName RetLev PSecs @
FS : funSecure SF (secfun FName RetTy RetLev RetVar RVVal Params Body)
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
GFEI : paramNames Params PNames
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < FS: case FS.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body RetLev PSecs SF ParamSecs Params RetTy ParamSecs1 SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (secfun FName RetTy RetLev RetVar RVVal Params Body) FName RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs1
FS1 : secure SF [(RetVar, RetLev)::ParamSecs1] RetLev Body SG
FS2 : lookup SF FName (RetLev, PSecs1)
FS3 : values ParamSecs1 PSecs1
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < Dmn: apply paramNames_paramSecs to _ GFEI FS.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body RetLev PSecs SF ParamSecs Params RetTy ParamSecs1 SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (secfun FName RetTy RetLev RetVar RVVal Params Body) FName RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs1
FS1 : secure SF [(RetVar, RetLev)::ParamSecs1] RetLev Body SG
FS2 : lookup SF FName (RetLev, PSecs1)
FS3 : values ParamSecs1 PSecs1
Dmn : domain ParamSecs1 PNames
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < Z: apply domain_values_zip to Dmn FS3.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body RetLev PSecs SF ParamSecs Params RetTy ParamSecs1 SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (secfun FName RetTy RetLev RetVar RVVal Params Body) FName RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs1
FS1 : secure SF [(RetVar, RetLev)::ParamSecs1] RetLev Body SG
FS2 : lookup SF FName (RetLev, PSecs1)
FS3 : values ParamSecs1 PSecs1
Dmn : domain ParamSecs1 PNames
Z : zip PNames PSecs1 ParamSecs1
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply paramSecs_unique to _ FS GFS1.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body RetLev PSecs SF ParamSecs Params RetTy SG PSecs1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (secfun FName RetTy RetLev RetVar RVVal Params Body) FName RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs
FS1 : secure SF [(RetVar, RetLev)::ParamSecs] RetLev Body SG
FS2 : lookup SF FName (RetLev, PSecs1)
FS3 : values ParamSecs PSecs1
Dmn : domain ParamSecs PNames
Z : zip PNames PSecs1 ParamSecs
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply values_unique to FS3 GFS2.

Subgoal 2:

Variables: FName RetVar RVVal PNames Body RetLev PSecs SF ParamSecs Params RetTy SG
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
GFS : getFunSec (secfun FName RetTy RetLev RetVar RVVal Params Body) FName RetLev PSecs @
GFS1 : paramSecs Params ParamSecs
GFS2 : values ParamSecs PSecs
H1 : is_string FName
H2 : is_typ RetTy
H3 : is_slev RetLev
H4 : is_string RetVar
H5 : is_value RVVal
H6 : is_list is_param Params
H7 : is_stmt Body
GFEI : paramNames Params PNames
FS : paramSecs Params ParamSecs
FS1 : secure SF [(RetVar, RetLev)::ParamSecs] RetLev Body SG
FS2 : lookup SF FName (RetLev, PSecs)
FS3 : values ParamSecs PSecs
Dmn : domain ParamSecs PNames
Z : zip PNames PSecs ParamSecs
============================
 exists ZP SG,
   (FName = FName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < search.

Subgoal 3:

Variables: FName RetVar RVVal PNames Body SName RetLev PSecs SF F_P
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun <unknown I fun>
GFEI : getFunEvalInfo <unknown I fun> FName RetVar RVVal PNames Body
GFS : getFunSec <unknown I fun> SName RetLev PSecs @
FS : funSecure SF <unknown I fun>
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P SName RetLev PSecs *
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < GFEI': apply proj_getFunEvalInfo_forward to GFS1 _ GFEI.

Subgoal 3:

Variables: FName RetVar RVVal PNames Body SName RetLev PSecs SF F_P
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun <unknown I fun>
GFEI : getFunEvalInfo <unknown I fun> FName RetVar RVVal PNames Body
GFS : getFunSec <unknown I fun> SName RetLev PSecs @
FS : funSecure SF <unknown I fun>
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P SName RetLev PSecs *
GFEI' : getFunEvalInfo F_P FName RetVar RVVal PNames Body
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply proj_fun_is to GFS1 _.

Subgoal 3:

Variables: FName RetVar RVVal PNames Body SName RetLev PSecs SF F_P
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun <unknown I fun>
GFEI : getFunEvalInfo <unknown I fun> FName RetVar RVVal PNames Body
GFS : getFunSec <unknown I fun> SName RetLev PSecs @
FS : funSecure SF <unknown I fun>
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P SName RetLev PSecs *
GFEI' : getFunEvalInfo F_P FName RetVar RVVal PNames Body
H1 : is_fun F_P
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < FS: case FS.

Subgoal 3:

Variables: FName RetVar RVVal PNames Body SName RetLev PSecs SF F_P F_P1
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun <unknown I fun>
GFEI : getFunEvalInfo <unknown I fun> FName RetVar RVVal PNames Body
GFS : getFunSec <unknown I fun> SName RetLev PSecs @
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P SName RetLev PSecs *
GFEI' : getFunEvalInfo F_P FName RetVar RVVal PNames Body
H1 : is_fun F_P
FS : |{fun}- <unknown I fun> ~~> F_P1
FS1 : funSecure SF F_P1
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply proj_fun_unique to FS GFS1 _.

Subgoal 3:

Variables: FName RetVar RVVal PNames Body SName RetLev PSecs SF F_P
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun <unknown I fun>
GFEI : getFunEvalInfo <unknown I fun> FName RetVar RVVal PNames Body
GFS : getFunSec <unknown I fun> SName RetLev PSecs @
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P SName RetLev PSecs *
GFEI' : getFunEvalInfo F_P FName RetVar RVVal PNames Body
H1 : is_fun F_P
FS : |{fun}- <unknown I fun> ~~> F_P
FS1 : funSecure SF F_P
============================
 exists ZP SG,
   (FName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply IH to _ GFEI' GFS2 FS1.

Subgoal 3:

Variables: RetVar RVVal PNames Body SName RetLev PSecs SF F_P ZP SG
IH : forall F FName RetVar RVVal PNames Body SName RetLev PSecs SF,
       is_fun F -> getFunEvalInfo F FName RetVar RVVal PNames Body -> getFunSec F SName RetLev PSecs * ->
       funSecure SF F -> exists ZP SG,
         (FName = SName /\ zip PNames PSecs ZP) /\
         secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
IsF : is_fun <unknown I fun>
GFEI : getFunEvalInfo <unknown I fun> SName RetVar RVVal PNames Body
GFS : getFunSec <unknown I fun> SName RetLev PSecs @
GFS1 : |{fun}- <unknown I fun> ~~> F_P
GFS2 : getFunSec F_P SName RetLev PSecs *
GFEI' : getFunEvalInfo F_P SName RetVar RVVal PNames Body
H1 : is_fun F_P
FS : |{fun}- <unknown I fun> ~~> F_P
FS1 : funSecure SF F_P
H2 : zip PNames PSecs ZP
H3 : secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 exists ZP SG,
   (SName = SName /\ zip PNames PSecs ZP) /\
   secure SF [(RetVar, RetLev)::ZP] RetLev Body SG
 < search.

Proof completed.
 < Theorem gatherCtxs_secFunCtxs :
     forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, RVVal, PNames, Body) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG.

============================
 forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
   is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
   lookup SF FName (RetLev, PSecs) -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
   exists ZP SG,
     zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < induction on 5.

IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
   is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
   lookup SF FName (RetLev, PSecs) @ -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
   exists ZP SG,
     zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < intros IsFs GFSC GFEC FS LS LE.

Variables: Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun Fs
GFSC : gatherFunSecCtx Fs SF
GFEC : getFunEvalCtx Fs FE
FS : funsSecure SF_Full Fs
LS : lookup SF FName (RetLev, PSecs) @
LE : lookup FE FName (RetVar, (RVVal, (PNames, Body)))
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < LS: case LS.

Subgoal 1:

Variables: Fs FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun Fs
GFSC : gatherFunSecCtx Fs ((FName, (RetLev, PSecs))::Rest)
GFEC : getFunEvalCtx Fs FE
FS : funsSecure SF_Full Fs
LE : lookup FE FName (RetVar, (RVVal, (PNames, Body)))
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < GFSC: case GFSC.

Subgoal 1:

Variables: FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest FRest F
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun (F::FRest)
GFEC : getFunEvalCtx (F::FRest) FE
FS : funsSecure SF_Full (F::FRest)
LE : lookup FE FName (RetVar, (RVVal, (PNames, Body)))
GFSC : getFunSec F FName RetLev PSecs
GFSC1 : gatherFunSecCtx FRest Rest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < GFEC: case GFEC.

Subgoal 1:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest FRest F CRest Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun (F::FRest)
FS : funsSecure SF_Full (F::FRest)
LE : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
GFSC : getFunSec F FName RetLev PSecs
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < FS: case FS.

Subgoal 1:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest FRest F CRest Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun (F::FRest)
LE : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
GFSC : getFunSec F FName RetLev PSecs
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < case IsFs.

Subgoal 1:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest FRest F CRest Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
LE : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
GFSC : getFunSec F FName RetLev PSecs
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply getFun_sec to _ GFEC GFSC FS.

Subgoal 1:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest FRest F CRest Body1 PNames1 RVVal1 RetVar1 ZP SG
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
LE : lookup ((FName, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
GFSC : getFunSec F FName RetLev PSecs
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : zip PNames1 PSecs ZP
H4 : secure SF_Full [(RetVar1, RetLev)::ZP] RetLev Body1 SG
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < LE: case LE.

Subgoal 1.1:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest FRest F CRest ZP SG
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
GFSC : getFunSec F FName RetLev PSecs
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : zip PNames PSecs ZP
H4 : secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < search.

Subgoal 1.2:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest FRest F CRest Body1 PNames1 RVVal1 RetVar1 ZP SG
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
GFSC : getFunSec F FName RetLev PSecs
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : zip PNames1 PSecs ZP
H4 : secure SF_Full [(RetVar1, RetLev)::ZP] RetLev Body1 SG
LE : FName = FName -> false
LE1 : lookup CRest FName (RetVar, (RVVal, (PNames, Body)))
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply LE to _.

Subgoal 2:

Variables: Fs FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest V K
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun Fs
GFSC : gatherFunSecCtx Fs ((K, V)::Rest)
GFEC : getFunEvalCtx Fs FE
FS : funsSecure SF_Full Fs
LE : lookup FE FName (RetVar, (RVVal, (PNames, Body)))
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < GFSC: case GFSC.

Subgoal 2:

Variables: FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest K PSecs1 Lev FRest F
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun (F::FRest)
GFEC : getFunEvalCtx (F::FRest) FE
FS : funsSecure SF_Full (F::FRest)
LE : lookup FE FName (RetVar, (RVVal, (PNames, Body)))
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F K Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < GFEC: case GFEC.

Subgoal 2:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest K PSecs1 Lev FRest F CRest Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun (F::FRest)
FS : funsSecure SF_Full (F::FRest)
LE : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F K Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < FS: case FS.

Subgoal 2:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest K PSecs1 Lev FRest F CRest Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
IsFs : is_list is_fun (F::FRest)
LE : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F K Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < case IsFs.

Subgoal 2:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest K PSecs1 Lev FRest F CRest Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
LE : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F K Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply getFun_sec to _ GFEC GFSC FS.

Subgoal 2:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest K PSecs1 Lev FRest F CRest Body1 PNames1 RVVal1 RetVar1 ZP SG
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
LE : lookup ((K, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest) FName (RetVar, (RVVal, (PNames, Body)))
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F K Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F K RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : zip PNames1 PSecs1 ZP
H4 : secure SF_Full [(RetVar1, Lev)::ZP] Lev Body1 SG
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < LE: case LE.

Subgoal 2.1:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest PSecs1 Lev FRest F CRest ZP SG
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
LS : FName = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F FName Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : zip PNames PSecs1 ZP
H4 : secure SF_Full [(RetVar, Lev)::ZP] Lev Body SG
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply LS to _.

Subgoal 2.2:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest K PSecs1 Lev FRest F CRest Body1 PNames1 RVVal1 RetVar1 ZP SG
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F K Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F K RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : zip PNames1 PSecs1 ZP
H4 : secure SF_Full [(RetVar1, Lev)::ZP] Lev Body1 SG
LE : K = FName -> false
LE1 : lookup CRest FName (RetVar, (RVVal, (PNames, Body)))
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < apply IH to _ GFSC1 GFEC1 FS1 LS1 LE1.

Subgoal 2.2:

Variables: SF_Full FName RetLev PSecs RetVar RVVal PNames Body Rest K PSecs1 Lev FRest F CRest Body1 PNames1 RVVal1 RetVar1 ZP SG ZP1 SG1
IH : forall Fs SF FE SF_Full FName RetLev PSecs RetVar RVVal PNames Body,
       is_list is_fun Fs -> gatherFunSecCtx Fs SF -> getFunEvalCtx Fs FE -> funsSecure SF_Full Fs ->
       lookup SF FName (RetLev, PSecs) * -> lookup FE FName (RetVar, (RVVal, (PNames, Body))) ->
       exists ZP SG,
         zip PNames PSecs ZP /\
         secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
LS : K = FName -> false
LS1 : lookup Rest FName (RetLev, PSecs) *
GFSC : getFunSec F K Lev PSecs1
GFSC1 : gatherFunSecCtx FRest Rest
GFEC : getFunEvalInfo F K RetVar1 RVVal1 PNames1 Body1
GFEC1 : getFunEvalCtx FRest CRest
FS : funSecure SF_Full F
FS1 : funsSecure SF_Full FRest
H1 : is_fun F
H2 : is_list is_fun FRest
H3 : zip PNames1 PSecs1 ZP
H4 : secure SF_Full [(RetVar1, Lev)::ZP] Lev Body1 SG
LE : K = FName -> false
LE1 : lookup CRest FName (RetVar, (RVVal, (PNames, Body)))
H5 : zip PNames PSecs ZP1
H6 : secure SF_Full [(RetVar, RetLev)::ZP1] RetLev Body SG1
============================
 exists ZP SG,
   zip PNames PSecs ZP /\ secure SF_Full [(RetVar, RetLev)::ZP] RetLev Body SG
 < search.

Proof completed.
 < Extensible_Theorem
      program_secure : forall P A_S A_A A_B O_A O_B,
         IsP : is_program P ->
         IsA_A : is_list is_value A_A ->
         IsA_B : is_list is_value A_B ->
         Sec : programSecure P A_S ->
         Rel : level_arg_vals A_S A_A A_B ->
         EvA : evalProgram A_A P O_A ->
         EvB : evalProgram A_B P O_B ->
         O_A = O_B
      on Sec.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsP : is_program (program Funs Main)
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
EvA : evalProgram A_A (program Funs Main) O_A
EvB : evalProgram A_B (program Funs Main) O_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
============================
 O_A = O_B
 < case IsP.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
EvA : evalProgram A_A (program Funs Main) O_A
EvB : evalProgram A_B (program Funs Main) O_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
============================
 O_A = O_B
 < EvA: case EvA.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
EvB : evalProgram A_B (program Funs Main) O_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
============================
 O_A = O_B
 < EvB: case EvB.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FCtx1 MainName1 RetVar1 RetVal1 PNames1 Body1 InitEnv1 EE1
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx1
EvB1 : getFunEvalInfo Main MainName1 RetVar1 RetVal1 PNames1 Body1
EvB2 : zip PNames1 A_B InitEnv1
EvB3 : evalStmt ((MainName1, (RetVar1, (RetVal1, (PNames1, Body1))))::FCtx1) [(RetVar1, RetVal1)::InitEnv1] Body1 EE1 O_B
============================
 O_A = O_B
 < apply getFunEvalCtx_unique to _ EvB EvA.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE MainName1 RetVar1 RetVal1 PNames1 Body1 InitEnv1 EE1
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main MainName1 RetVar1 RetVal1 PNames1 Body1
EvB2 : zip PNames1 A_B InitEnv1
EvB3 : evalStmt ((MainName1, (RetVar1, (RetVal1, (PNames1, Body1))))::FCtx) [(RetVar1, RetVal1)::InitEnv1] Body1 EE1 O_B
============================
 O_A = O_B
 < apply getFunEvalInfo_unique to _ EvB1 EvA1.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
============================
 O_A = O_B
 < apply gatherFunSecCtx_is to _ Sec1.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
============================
 O_A = O_B
 < apply getFunSec_is to _ Sec2.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
============================
 O_A = O_B
 < MainS: apply getFun_sec to _ EvA1 Sec2 Sec4.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 O_A = O_B
 < assert secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, RetVal, PNames, Body))::FCtx).

Subgoal 1.1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
 < unfold .

Subgoal 1.1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
============================
 forall FName RetLev1 PSecs RetVar1 RVVal PNames1 Body1,
   lookup ((Name, (RetLev, A_S))::SF) FName (RetLev1, PSecs) -> lookup ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) FName (RetVar1, (RVVal, (PNames1, Body1))) ->
   exists ZP SG,
     zip PNames1 PSecs ZP /\
     secure ((Name, (RetLev, A_S))::SF) [(RetVar1, RetLev1)::ZP] RetLev1 Body1 SG
 < intros LS LE.

Subgoal 1.1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
LS : lookup ((Name, (RetLev, A_S))::SF) FName (RetLev1, PSecs)
LE : lookup ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) FName (RetVar2, (RVVal, (PNames2, Body2)))
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((Name, (RetLev, A_S))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < LS: case LS.

Subgoal 1.1.1:

Variables: A_A A_B O_A O_B SF Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) PSecs @
Rel : level_arg_vals PSecs A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main FName RetLev1 PSecs
Sec3 : funsSecure ((FName, (RetLev1, PSecs))::SF) Funs
Sec4 : funSecure ((FName, (RetLev1, PSecs))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main FName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((FName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main FName RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((FName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string FName
H5 : is_slev RetLev1
H6 : is_list is_slev PSecs
MainS : zip PNames PSecs ZP
MainS1 : secure ((FName, (RetLev1, PSecs))::SF) [(RetVar, RetLev1)::ZP] RetLev1 Body SG
LE : lookup ((FName, (RetVar, (RetVal, (PNames, Body))))::FCtx) FName (RetVar2, (RVVal, (PNames2, Body2)))
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((FName, (RetLev1, PSecs))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < LE: case LE.

Subgoal 1.1.1.1:

Variables: A_A A_B O_A O_B SF Main Funs FCtx InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) PSecs @
Rel : level_arg_vals PSecs A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main FName RetLev1 PSecs
Sec3 : funsSecure ((FName, (RetLev1, PSecs))::SF) Funs
Sec4 : funSecure ((FName, (RetLev1, PSecs))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main FName RetVar2 RVVal PNames2 Body2
EvA2 : zip PNames2 A_A InitEnv
EvA3 : evalStmt ((FName, (RetVar2, (RVVal, (PNames2, Body2))))::FCtx) [(RetVar2, RVVal)::InitEnv] Body2 EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main FName RetVar2 RVVal PNames2 Body2
EvB2 : zip PNames2 A_B InitEnv1
EvB3 : evalStmt ((FName, (RetVar2, (RVVal, (PNames2, Body2))))::FCtx) [(RetVar2, RVVal)::InitEnv1] Body2 EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string FName
H5 : is_slev RetLev1
H6 : is_list is_slev PSecs
MainS : zip PNames2 PSecs ZP
MainS1 : secure ((FName, (RetLev1, PSecs))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((FName, (RetLev1, PSecs))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < search.

Subgoal 1.1.1.2:

Variables: A_A A_B O_A O_B SF Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) PSecs @
Rel : level_arg_vals PSecs A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main FName RetLev1 PSecs
Sec3 : funsSecure ((FName, (RetLev1, PSecs))::SF) Funs
Sec4 : funSecure ((FName, (RetLev1, PSecs))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main FName RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((FName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main FName RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((FName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string FName
H5 : is_slev RetLev1
H6 : is_list is_slev PSecs
MainS : zip PNames PSecs ZP
MainS1 : secure ((FName, (RetLev1, PSecs))::SF) [(RetVar, RetLev1)::ZP] RetLev1 Body SG
LE : FName = FName -> false
LE1 : lookup FCtx FName (RetVar2, (RVVal, (PNames2, Body2)))
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((FName, (RetLev1, PSecs))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < apply LE to _.

Subgoal 1.1.2:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
LE : lookup ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) FName (RetVar2, (RVVal, (PNames2, Body2)))
LS : Name = FName -> false
LS1 : lookup SF FName (RetLev1, PSecs)
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((Name, (RetLev, A_S))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < LE: case LE.

Subgoal 1.1.2.1:

Variables: A_S A_A A_B O_A O_B SF RetLev Main Funs FCtx InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main FName RetLev A_S
Sec3 : funsSecure ((FName, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((FName, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main FName RetVar2 RVVal PNames2 Body2
EvA2 : zip PNames2 A_A InitEnv
EvA3 : evalStmt ((FName, (RetVar2, (RVVal, (PNames2, Body2))))::FCtx) [(RetVar2, RVVal)::InitEnv] Body2 EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main FName RetVar2 RVVal PNames2 Body2
EvB2 : zip PNames2 A_B InitEnv1
EvB3 : evalStmt ((FName, (RetVar2, (RVVal, (PNames2, Body2))))::FCtx) [(RetVar2, RVVal)::InitEnv1] Body2 EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string FName
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames2 A_S ZP
MainS1 : secure ((FName, (RetLev, A_S))::SF) [(RetVar2, RetLev)::ZP] RetLev Body2 SG
LS : FName = FName -> false
LS1 : lookup SF FName (RetLev1, PSecs)
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((FName, (RetLev, A_S))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < apply LS to _.

Subgoal 1.1.2.2:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
LS : Name = FName -> false
LS1 : lookup SF FName (RetLev1, PSecs)
LE : Name = FName -> false
LE1 : lookup FCtx FName (RetVar2, (RVVal, (PNames2, Body2)))
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((Name, (RetLev, A_S))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < apply gatherCtxs_secFunCtxs to _ Sec1 EvA Sec3 LS1 LE1.

Subgoal 1.1.2.2:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG FName RetLev1 PSecs RetVar2 RVVal PNames2 Body2 ZP1 SG1
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
LS : Name = FName -> false
LS1 : lookup SF FName (RetLev1, PSecs)
LE : Name = FName -> false
LE1 : lookup FCtx FName (RetVar2, (RVVal, (PNames2, Body2)))
H7 : zip PNames2 PSecs ZP1
H8 : secure ((Name, (RetLev, A_S))::SF) [(RetVar2, RetLev1)::ZP1] RetLev1 Body2 SG1
============================
 exists ZP SG,
   zip PNames2 PSecs ZP /\
   secure ((Name, (RetLev, A_S))::SF) [(RetVar2, RetLev1)::ZP] RetLev1 Body2 SG
 < search.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
============================
 O_A = O_B
 < ZA: assert zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv).

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
============================
 O_A = O_B
 < ZB: assert zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1).

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
============================
 O_A = O_B
 < ZM: assert zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP).

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
============================
 O_A = O_B
 < assert level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B).

Subgoal 1.2:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
============================
 level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
 < Or: apply is_slev_public_or_not to _ with
         L = RetLev.

Subgoal 1.2:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
Or : RetLev = public \/ (RetLev = public -> false)
============================
 level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
 < case Or.

Subgoal 1.2.1:

Variables: A_S A_A A_B O_A O_B SF Name Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name public A_S
Sec3 : funsSecure ((Name, (public, A_S))::SF) Funs
Sec4 : funSecure ((Name, (public, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev public
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (public, A_S))::SF) [(RetVar, public)::ZP] public Body SG
H7 : secFunCtxs ((Name, (public, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (public::A_S) ((RetVar, public)::ZP)
============================
 level_arg_vals (public::A_S) (RetVal::A_A) (RetVal::A_B)
 < search.

Subgoal 1.2.2:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : RetLev = public -> false
============================
 level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
 < search.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
============================
 O_A = O_B
 < PE: apply zip_level_arg_vals to _ ZA ZB ZM.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
============================
 O_A = O_B
 < apply zip_names_same to ZA ZM.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
============================
 O_A = O_B
 < apply zip_names_same to ZB ZM.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
============================
 O_A = O_B
 < apply getFunEvalInfo_is to _ EvA1.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
H11 : is_string Name
H12 : is_string RetVar
H13 : is_value RetVal
H14 : is_list is_string PNames
H15 : is_stmt Body
============================
 O_A = O_B
 < apply getFunSec_is to _ Sec2.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
H11 : is_string Name
H12 : is_string RetVar
H13 : is_value RetVal
H14 : is_list is_string PNames
H15 : is_stmt Body
H16 : is_string Name
H17 : is_slev RetLev
H18 : is_list is_slev A_S
============================
 O_A = O_B
 < apply zip_is to _ _ ZA.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
H11 : is_string Name
H12 : is_string RetVar
H13 : is_value RetVal
H14 : is_list is_string PNames
H15 : is_stmt Body
H16 : is_string Name
H17 : is_slev RetLev
H18 : is_list is_slev A_S
H19 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
============================
 O_A = O_B
 < apply zip_is to _ _ ZB.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
H11 : is_string Name
H12 : is_string RetVar
H13 : is_value RetVal
H14 : is_list is_string PNames
H15 : is_stmt Body
H16 : is_string Name
H17 : is_slev RetLev
H18 : is_list is_slev A_S
H19 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H20 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv1)
============================
 O_A = O_B
 < apply zip_is_sec to _ _ ZM.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
H11 : is_string Name
H12 : is_string RetVar
H13 : is_value RetVal
H14 : is_list is_string PNames
H15 : is_stmt Body
H16 : is_string Name
H17 : is_slev RetLev
H18 : is_list is_slev A_S
H19 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H20 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv1)
H21 : is_list (is_pair is_string is_slev) ((RetVar, RetLev)::ZP)
============================
 O_A = O_B
 < apply getFunEvalCtx_is to _ EvA.

Subgoal 1:

Variables: A_S A_A A_B O_A O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_A
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
H11 : is_string Name
H12 : is_string RetVar
H13 : is_value RetVal
H14 : is_list is_string PNames
H15 : is_stmt Body
H16 : is_string Name
H17 : is_slev RetLev
H18 : is_list is_slev A_S
H19 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H20 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv1)
H21 : is_list (is_pair is_string is_slev) ((RetVar, RetLev)::ZP)
H22 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
============================
 O_A = O_B
 < apply secure_output to _ _ _ _ _ _ _ _ _ _ _ MainS1 EvA3 EvB3.

Subgoal 1:

Variables: A_S A_A A_B O_B SF Name RetLev Main Funs FCtx RetVar RetVal PNames Body InitEnv EE InitEnv1 EE1 ZP SG
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure (program Funs Main) A_S @
Rel : level_arg_vals A_S A_A A_B
Sec1 : gatherFunSecCtx Funs SF
Sec2 : getFunSec Main Name RetLev A_S
Sec3 : funsSecure ((Name, (RetLev, A_S))::SF) Funs
Sec4 : funSecure ((Name, (RetLev, A_S))::SF) Main
H1 : is_list is_fun Funs
H2 : is_fun Main
EvA : getFunEvalCtx Funs FCtx
EvA1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvA2 : zip PNames A_A InitEnv
EvA3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O_B
EvB : getFunEvalCtx Funs FCtx
EvB1 : getFunEvalInfo Main Name RetVar RetVal PNames Body
EvB2 : zip PNames A_B InitEnv1
EvB3 : evalStmt ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv1] Body EE1 O_B
H3 : is_list (is_pair is_string (is_pair is_slev (is_list is_slev))) SF
H4 : is_string Name
H5 : is_slev RetLev
H6 : is_list is_slev A_S
MainS : zip PNames A_S ZP
MainS1 : secure ((Name, (RetLev, A_S))::SF) [(RetVar, RetLev)::ZP] RetLev Body SG
H7 : secFunCtxs ((Name, (RetLev, A_S))::SF) ((Name, (RetVar, (RetVal, (PNames, Body))))::FCtx)
ZA : zip (RetVar::PNames) (RetVal::A_A) ((RetVar, RetVal)::InitEnv)
ZB : zip (RetVar::PNames) (RetVal::A_B) ((RetVar, RetVal)::InitEnv1)
ZM : zip (RetVar::PNames) (RetLev::A_S) ((RetVar, RetLev)::ZP)
H8 : level_arg_vals (RetLev::A_S) (RetVal::A_A) (RetVal::A_B)
PE : public_equiv [(RetVar, RetLev)::ZP] [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv1]
H9 : names_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetLev)::ZP]
H10 : names_same [(RetVar, RetVal)::InitEnv1] [(RetVar, RetLev)::ZP]
H11 : is_string Name
H12 : is_string RetVar
H13 : is_value RetVal
H14 : is_list is_string PNames
H15 : is_stmt Body
H16 : is_string Name
H17 : is_slev RetLev
H18 : is_list is_slev A_S
H19 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H20 : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv1)
H21 : is_list (is_pair is_string is_slev) ((RetVar, RetLev)::ZP)
H22 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
============================
 O_B = O_B
 < search.

Subgoal 2:

Variables: A_S A_A A_B O_A O_B P_P
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsP : is_program <unknown I program>
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure <unknown I program> A_S @
Rel : level_arg_vals A_S A_A A_B
EvA : evalProgram A_A <unknown I program> O_A
EvB : evalProgram A_B <unknown I program> O_B
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P A_S *
============================
 O_A = O_B
 < EvA': apply proj_evalProgram_forward to Sec1 _ _ EvA.

Subgoal 2:

Variables: A_S A_A A_B O_A O_B P_P
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsP : is_program <unknown I program>
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure <unknown I program> A_S @
Rel : level_arg_vals A_S A_A A_B
EvA : evalProgram A_A <unknown I program> O_A
EvB : evalProgram A_B <unknown I program> O_B
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P A_S *
EvA' : evalProgram A_A P_P O_A
============================
 O_A = O_B
 < EvB': apply proj_evalProgram_forward to Sec1 _ _ EvB.

Subgoal 2:

Variables: A_S A_A A_B O_A O_B P_P
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsP : is_program <unknown I program>
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure <unknown I program> A_S @
Rel : level_arg_vals A_S A_A A_B
EvA : evalProgram A_A <unknown I program> O_A
EvB : evalProgram A_B <unknown I program> O_B
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P A_S *
EvA' : evalProgram A_A P_P O_A
EvB' : evalProgram A_B P_P O_B
============================
 O_A = O_B
 < apply proj_program_is to Sec1 _.

Subgoal 2:

Variables: A_S A_A A_B O_A O_B P_P
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsP : is_program <unknown I program>
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure <unknown I program> A_S @
Rel : level_arg_vals A_S A_A A_B
EvA : evalProgram A_A <unknown I program> O_A
EvB : evalProgram A_B <unknown I program> O_B
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P A_S *
EvA' : evalProgram A_A P_P O_A
EvB' : evalProgram A_B P_P O_B
H1 : is_program P_P
============================
 O_A = O_B
 < apply IH to _ _ _ Sec2 _ EvA' EvB'.

Subgoal 2:

Variables: A_S A_A A_B O_B P_P
IH : forall P A_S A_A A_B O_A O_B,
       is_program P -> is_list is_value A_A -> is_list is_value A_B -> programSecure P A_S * ->
       level_arg_vals A_S A_A A_B -> evalProgram A_A P O_A -> evalProgram A_B P O_B ->
       O_A = O_B
IsP : is_program <unknown I program>
IsA_A : is_list is_value A_A
IsA_B : is_list is_value A_B
Sec : programSecure <unknown I program> A_S @
Rel : level_arg_vals A_S A_A A_B
EvA : evalProgram A_A <unknown I program> O_B
EvB : evalProgram A_B <unknown I program> O_B
Sec1 : |{program}- <unknown I program> ~~> P_P
Sec2 : programSecure P_P A_S *
EvA' : evalProgram A_A P_P O_B
EvB' : evalProgram A_B P_P O_B
H1 : is_program P_P
============================
 O_B = O_B
 < search.

Proof completed.
Back to example home